Arrays 循环中的字符数组起点和&;做记号

Arrays 循环中的字符数组起点和&;做记号,arrays,visual-c++,char,Arrays,Visual C++,Char,我在帮我弟弟做编程作业,所以我们来到一个地方,那里有一个整数数组,所以如果表a[10]中有10个整数,你想以相反的方式放置它们,你应该: for(i=9;i>=0;i--) { printf("%d",a[i]); } 我可以理解这一点及其逻辑,但如果你有一个字符,那么你应该从10开始: for(i=10; i>=0;i--) { printf("%c",a[i]); } 原因是什么?为什么它会访问循环11次,而字母的数量是10,所以它需要所有的字母,我把9而不是10,一个字母

我在帮我弟弟做编程作业,所以我们来到一个地方,那里有一个整数数组,所以如果表a[10]中有10个整数,你想以相反的方式放置它们,你应该:

for(i=9;i>=0;i--)
{ 
printf("%d",a[i]);
}
我可以理解这一点及其逻辑,但如果你有一个字符,那么你应该从10开始:

for(i=10; i>=0;i--)
{
printf("%c",a[i]);
}
原因是什么?为什么它会访问循环11次,而字母的数量是10,所以它需要所有的字母,我把9而不是10,一个字母丢失了,那么是什么原因导致了字符[]

另外,我们何时添加&标记,例如: 我宣布

int a;
我写道:

scanf("%d",&a);
我知道这是因为我们需要提供“a”的地址,但请任何人提供更多的细节,我们什么时候写没有&?谢谢

char string[] = "helloworld";
该数组的长度是11,而不是10。(因此最高指数为10)。它的末尾包含一个NUL“\0”。但是,您不应该打印NUL,因此您仍然应该从9开始


如果在变量前面加上符号AND,则该变量将通过引用传递。基本上,这意味着使用它的任何函数都可以修改变量(否则该函数只能获得数据的副本)


它还用于获取变量的“地址”(基本上将其转换为指针),通常出于相同的原因。在C中使用的比C++多。

好,谢谢,但是为什么HeloWord的长度是11,不是10?我能看到的是10个字母,所以为什么它的长度是11,除了我加上了strlen(“名字”),得到了4个而不是5个。。所以我还是不明白这一点。字符数组的长度是其中的字符数,加上结尾处的
NUL
(表示“字符串结束”)
charperson[]=“name”
完全等同于
charperson[]={'n'、'a'、'm'、'e'、'\0'}
——但是,
strlen
(和各种相关函数)计算“打印长度”,即它们不包括
NUL
。我可以在这里获得帮助吗?