【发布时间】:2014-07-14 18:38:02
【问题描述】:
我对指针非常困惑。如果我们创建一个 'char' 类型的指针变量,类似于char *ch; 并为其分配一个字符数组。然后我们可以通过增加指针(++ch)来访问字符串中的每个字母。
char *ch;
char a[5]="hello";
*ch=a;
while(*ch) {
printf("%c",*ch);
++ch;
}
这工作得很好。但是我看到很多例子,例如,
struct example {
char *ch;
};
int main() {
struct example ex={"hello"};
printf("%s",ex.ch);
}
我对这个例子很困惑,比如直接将字符串分配给字符指针(而不是将字符串分配给变量然后将其分配给字符指针)可以使其可访问。在前面的例子中,*ch 指向数组“a”的起始内存。但在第二种情况下,指针 ch 指向哪个内存?谁能给我一个明确的解释?
【问题讨论】:
-
相反,字符串字面量是一个字符数组,在必要的时候会衰减为指针。
-
*ch=a应该是ch=a,对吧? -
@SteveCox:不,不是。字符串文字对应于
char[N]类型的对象,其中N比长度大一(以允许终止'\0'空字符)。像任何数组类型的表达式一样,在大多数但不是所有上下文中,它都隐式转换为指向其第一个元素的指针。请参阅comp.lang.c FAQ 的第 6 节。 -
@SteveCox,肯定是 12 岁。
-
char a[5]="hello";。您没有为空终止符留出空间。