C语言关于数组地址的问题
发布网友
发布时间:2022-04-26 17:38
我来回答
共4个回答
热心网友
时间:2023-10-18 02:15
这里二者等效,都是字符数组的地址。
首先,weekday[7] [10] 是二维数组,
而printf("%s\n",weekday[1])表示输出的是第二行所有数组元素,相当于把weekday[1]是一个一维数组的数组名,传输的是一个地址,然后全部输出这一行的元素。这个效果和printf("%s\n",&weekday[1])是一样的,所以干脆不写&。
热心网友
时间:2023-10-18 02:15
二维数组两种写法是等价的了。如果换成一维数组试试,肯定会出错的。
热心网友
时间:2023-10-18 02:16
严格来说,printf("%s\n",&weekday[1]); 这是错误的
char weekday[7][10]; 是二维数组,weekday是数组首地址
weekday[x]是第x+1行的地址(x=0...6)
char *p;
p=weekday[x] ; //是一维地址,可以进行赋值操作
&weekday[x] 相当于 &p, 是个二维指针值,所以p=&weekday[x] ;是错误的赋值。
但数组有一个特点,char a[10] ; a与&a的值是相同的!所以,在printf("%s", xxx ) ;//这里xxx只要是个有效的地址值,就会正确输出地址中的字符串。
热心网友
时间:2023-10-18 02:16
printf("%s",字符串地址); 字符串的输出需要字符串的首地址 每个字符串都有结束标志 '\0' C语言只要知道首地址,然后读取一直到'\0' 就结束了
char weekday[7][10] = {"a","b" ...}
weekday 是个字符二维数组 其中 "a" 字符串 其实是有 'a' '\0' 组成的