【发布时间】:2017-11-15 17:53:58
【问题描述】:
如果是指针,*p 表示存储的值,p 表示地址(对于声明 int *p)。
根据以下声明,name 指向字符串“示例”。所以*name 将是“E”而不是地址,而是实际值。那么下面的程序是如何工作的呢?我的意思是,我们正在增加值本身而不是指针(混淆)。
char *name="Example";
while(*name !='\0'){
printf("%c\n",*name++);
}
打印
E
x
a
m
p
l
e
【问题讨论】:
-
运算符优先级
-
*name是“E”(char值),而不是"E"(字符串)。但是@Olaf,指向字符串的指针 根据定义是指向其初始字符的指针(C11 7.1.1p1)。 -
@redsoxlost:“除了字符串或字符”是什么意思?这是的区别。
'E'是一个字符常量。 (由于历史原因,它在 C 中的类型为int;在 C++ 中,它的类型为char。)"E"是字符串文字。它在 C 中是char[2]类型,在 C++ 中是const char[2](2 因为终止空字符'\0')。 -
@redsoxlost:是的,用单引号和双引号括起来的材料在 C 语言中有很大的不同。在提问时,要非常小心你使用的那个——差异很重要!而且我没有用反引号将问题中的“E”括起来,因为那样你的陈述肯定是错误的,而不仅仅是“大部分错误”。在书面英语中随意使用单引号和双引号是可以的(在一定程度上);在讨论 C 的文本中不行。
标签: c