1.问题
我可不可以将str理解成既是一个指针,又是一个数组,所以可以在for循环中的printf那一行,转化说明%c相对应的,才可以写成str,进行访问用指针定义的数组。
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str = "i love fishc.com!";
int i,length;
length = strlen(str);
for(i = 0;i < length;i++)
{
printf("%c",str[i]);
}
printf("\n");
return 0;
}
2. 回答
你这理解也算是能自洽,
但是str[ i ]这种写法是有理可据的,
str[ i ]这种写法是一个语法糖(Syntactic sugar),具体可以看:什么是语法糖
就相当于*(str+i),就是对(str+i)进行解引用;
如果你指针这儿学的不错,那到这儿,应该也就能解答你的疑惑了,
但是,我还是说一下吧:
函数开始的时候,char *str = “i love fishc.com!”
这个就是定义里一个指针str,它指向的是"i love fishc.com!"这个字符串的首地址,同时也就是‘ i ’的地址,
让我们来假设,字符串的首地址为0,所以此时str指向地址0。
然后接着看for循环;
第一次 :i= 0时。打印str[0]的值,前面已经说了,它是一个语法糖,相当于*(str+0);刚才我们也假设了str指向的也是0,带入就有了*(0+0),所以相当于对地址0进行解引用,所以他的值就是‘ i ’。
第二次 :i = 1时,同理str[1],相到于*(0+1),也就是对地址1进行解引用,所以他的值就是‘ 空格 ’。
后面每一次的一样,依次打印这个字符串,直到把这个字符串都打印完成,退出for循环。
结束函数。