【发布时间】:2013-12-18 13:04:08
【问题描述】:
#include<stdio.h>
int main(void)
{
char heart[]="I Love Tillie"; /* using array notation */
int i;
for (i=0;i<6;i++)
{
printf("%c",&heart[i]); /* %c expects the address of the character we want to print */
}
return 0;
}
如果heart[i] 和&heart[i] 表示相同的东西,即heart[i] 的地址,为什么我的程序给我这个-?????? 作为输出?有人可以帮我吗?
【问题讨论】:
-
你在哪里读到的
heart[i]和&heart[i]一样? -
它们的意思不同。
-
字符数组的名称与任何数组名称一样,会产生数组第一个元素的地址。因此,以下对数组 m1 成立: m1 == &m1[0] 、 *m1 == 'L' 和 *(m1+1) == m1[1] == 'i' 来自 C Primer Plus-STephen普拉塔,我也很困惑。
-
是什么让您认为
char与字符的地址相同(char *)?! I've explained this in an answer to one of your other questions,不是吗? -
您误读了等价。显然,数组是
char m1[] = "Like";或类似的东西。说m1 == &m1[0]是准确的。说*m1 == 'L'相当于说m1[0] == 'L'并且鉴于我显示的初始化是准确的。同样,*(m1+1) == 'i'和m1[1] == 'i'分别是准确的,但复合语句*(m1+1) == m1[1] == 'i'在 C 中不会计算为 true,尽管松散地说是有道理的。