【发布时间】:2014-07-11 05:11:56
【问题描述】:
我是 C 语言的新手,我的问题是关于指针的。据我所知和搜索的指针只能存储其他变量的地址,但不能存储实际值(如整数或字符)。但是在下面的代码中 char 指针 c 实际上存储了一个字符串。它执行没有错误,并将输出作为“名称”。
#include <stdio.h>
main()
{
char *c;
c="name";
puts(c);
}
任何人都可以解释指针如何在没有任何内存的情况下存储字符串,或者是否在创建内存的位置创建内存以及可以创建多少大小。
我尝试将它与整数类型指针一起使用
#include <stdio.h>
main()
{
int *c;
c=10;
printf("%d",c);
}
但是报错了
cc test.c -o test
test.c: In function ‘main’:
test.c:5:3: warning: assignment makes pointer from integer without a cast [enabled by default]
c=10;
^
test.c:6:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%d",c);
^
指针存放的是变量的地址,为什么整数指针和字符指针不一样。
如果我对指针有什么遗漏,请解释一下。
【问题讨论】:
-
这只是类型的问题。
"name"是一个指针(技术上是一个数组),因此可以存储在一个指针中。10是一个整数,因此不能存储在指针中。我认为您的困惑源于字符串文字实际上具有指针类型这一不太明显的事实。