我正在研究指针。因此,同时研究阵列。它表示数组arr
的第一个元素的地址是&arr[0]
,也可以写为arr
。
但是我知道字符串是一个字符数组,所以如果有一个字符串:
char string[] = "ilovejapan";
然后使用printf打印它
printf("%s", string);
不应该只打印第一个地址吗?真的很困惑现在。
问题已更新:现在在下面的示例中*W
指向单词,表示它指向字符串word
的第一个地址对吗?如何访问完整字符串word
?
int getword(char *word, int lim)
{
int c, getch(void);
void ungetch(int);
char *W = word;
while (isspace(c = getch()))
;
if (c != EOF)
*W++ = c;
if (lisalpha(c)) {
*W = '\0';
return c;
}
for ( ; --lim > 0; W++)
if ( lisalnum(*W = getch())) {
ungetch ( *W) ;
break;
}
*W = '\0';
return word[O];
}
答案 0 :(得分:7)
转化说明符%s
说,"给我一个字符的地址。我将打印该字符,然后查看下一个更高的地址并打印那个字符,依此类推,直到我看到的地址中的字符为零"。所以string
确实是一个角色的地址,但printf
知道如何处理它。
答案 1 :(得分:2)
char string[0] = "ilovejapan";
不是有效的声明。也许你打算离开0
?
无论如何,%s
格式说明符旨在与指向字符串的指针匹配,在您的情况下就可以了。它会打印该地址中的字符,直到终止空字符。
答案 2 :(得分:1)
当您在string
中传递printf("%s", string);
时,您告诉printf
您要打印一个字符串,并告诉该函数字符串中第一个字符的地址。使用其地址,printf
可以确定在该地址存储的字符,并增加第一个字符的地址以获取第二个字符的地址,并打印该字符,依此类推。当它找到一个字符(不是该字符的地址,但实际字符本身)时,它会停止打印,其值为'\0'
(“零”字符,或由数字0
表示的字符)。如果这是有道理的。