char c="abcd"的“”
char c="abcd"的“”其中一个作用是返回abcd的地址给c 并不是将abcd赋值给c那为什么在printf(“%s”,c)中能直接打印出abcd 不用给c加上取值符号 即printf("%s",*c)呢 sorry是char c[]="abcd" 因为c[]是一个数组,数组名就是代表了这个数组的首地址,所以说其实c就是一个地址,不用再加* char c[]="abcd"编辑器会自动在末尾加'\0'结束符c = {'a','b','c','d','\0'}
printf("%s",c)
%s 输出一个字符串 ,会在 数组的首地址 开始自动搜索结束符 '\0',结果是将结束符之前的所有的元素以字符串形式打印出来
char c[] 是一个数组,基于数组的特性,数组名即是这个数组的首地址
以上为个人理解,仅供参考 你提的这个问题正好是我前几天的疑惑,看看这个就明白了
c实际上没有string类型。那么c的%s怎么来的呢?用char数组代替。那么%s如何工作?它会从所给指针指向的位置开始,逐字符的打印输出,直到遇到“/n”或者“/0”。所以%s需要的只是一个指针值。(或者说数组第一个值的内存地址)读取了第一个值后,它会跳到后面的位置继续读取,这建立在你传给它的值是指针的前提上。如果你用了*,结果只得到了第一个字符而没有指针(*表示取出指针所指位置保存的值),程序不知道后续字符的储存位置,它去哪里找?再说%d,%d只打印一个十进制数值,不需要后续继续打印,所以直接给它这个数值就行了。(*是什么意思不需要我再说一遍了吧?)
页:
[1]