C 我弄糊涂了

C 我弄糊涂了,c,string,C,String,我现在正在学习指针。因此,阵列是同时研究的。它表示数组arr元素的第一个地址是&arr[0],也可以写成arr 但据我所知,字符串是一个字符数组,因此如果您有一个字符串: charstring[]=“ilovejapan” 然后使用printf打印它 printf(“%s”,字符串) 它不应该只是打印第一个地址吗?现在真的很困惑 问题更新:在下面的示例中,*W指向word,这意味着它指向字符串word的第一个地址,对吗?此访问如何完成字符串word? int getword(char *word

我现在正在学习指针。因此,阵列是同时研究的。它表示数组
arr
元素的第一个地址是
&arr[0]
,也可以写成
arr

但据我所知,字符串是一个字符数组,因此如果您有一个字符串:

charstring[]=“ilovejapan”

然后使用printf打印它

printf(“%s”,字符串)

它不应该只是打印第一个地址吗?现在真的很困惑

问题更新:在下面的示例中,
*W
指向word,这意味着它指向字符串
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]; 
}
char字符串[0]=“ilovejapan”不是有效的声明。也许你是想把
0
去掉


无论如何,
%s
格式说明符旨在与指向字符串的指针相匹配,在您的情况下,这很好。它从该地址打印字符直到终止的空字符。

转换说明符
%s
说,“给我一个字符的地址。我将打印该字符,然后查看下一个更高的地址并打印该字符,依此类推,直到我正在查看的地址处的字符为零”。因此
string
确实是字符的地址,但是
printf
知道如何处理它。

当您在
printf(“%s”,string)中传递
string
,您告诉
printf
您想要打印一个字符串,并且告诉函数字符串中第一个字符的地址。使用其地址,
printf
可以计算出存储在该地址的字符,并递增第一个字符的地址以获得第二个字符的地址,然后打印该字符,依此类推。当找到值为
'\0'
的字符(不是该字符的地址,而是实际字符本身)(“零”字符或由数字
0
表示的字符)时,它停止打印。如果这有意义的话。

请阅读的第6节和第8节。若要添加此内容,可以声明如下字符串:
char*string=“ilovejapan”
。它创建一个字符串并将其起始地址存储在名为
string
的指针中。指针可以像数组一样在代码中使用(例如,
string[2]
产生
o
)。问题总是说“数组元素的第一个地址
arr
&arr[0]
,也可以写成
arr
”,所以你的第一句话有被风车倾斜的危险。这是正确的,但这个问题似乎并没有怀疑它的正确性。如果你有一个新问题,发布一个新问题。编辑这篇文章不太可能引起如此多的关注。