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
”,所以你的第一句话有被风车倾斜的危险。这是正确的,但这个问题似乎并没有怀疑它的正确性。如果你有一个新问题,发布一个新问题。编辑这篇文章不太可能引起如此多的关注。