【发布时间】:2013-04-26 08:58:52
【问题描述】:
我是 C 编程的新手。我对指针的混乱行为感到困惑。特别是涉及到字符串和数组时。
我知道我写不出来,
#include <stdio.h>
int main()
{
int *number=5;
printf("%d",*number);
}
因为显然它会尝试写入内存的第 5 个位置。这会使程序崩溃。我必须初始化“数字”。
但是当涉及到字符串时,我可以这样写,
#include <stdio.h>
int main()
{
char *name="xxxxx";
printf(name);
}
而且它也有效。所以这意味着它隐式初始化“name”指针。我也知道 name=&name[0] 但我也发现了 name=&name。怎么会这样? 因为,对我来说,它看起来是两个同名的变量。谁能告诉我字符串是如何在内存中创建的?(一直以来我都假设它创建了 name[0].....name[n-1] 和另一个名为“name”的变量(一个指针),在里面我们把 name[0] 的位置。好像是我错了。)
PS:-我的英语可能不太好,如果有人能给我一个关于上述问题的链接,将不胜感激。
【问题讨论】:
-
C 中指针的行为并不混乱。它定义明确。
-
name绝对不同于&name如果name是char*类型。只有当name是char[]并且只有值相同但类型不同时,它才是正确的。对于char name[],名称属于char[]类型,但 &name 属于char(*)[] -
另外,请一次只问一个问题,而不是把所有让你困惑的问题都放在同一个问题中。
-
很抱歉将几个问题放在一起。当某些事情不确定时,它会引发更多问题?但无论如何谢谢。
标签: c arrays string pointers memory-management