C语言新手!这几个语句不懂!谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/03 07:18:35
#include <stdio.h>
void main()
{
char s[5][20],*p[5];
int i;
for (i=0;i<5;i++)
p[i]=s[i];
for (i=0;i<5;i++)
scanf ("%s",p[i]);
for (i=0;i<5;i++)
printf ("%d\n",strlen(p[i]));

}

1:为什么是p[i]=s[i]而不是p[i]=&s[i]呢?
2:为什么要p[i]=s[i]?

p[i]=s[i] 相当于: p[i]=&s[i][0]

s是个二维数组,s[i]就已经是地址了,所以不用再加&号了。当然如果s是个一维数组,s[i]就代表元素的值了,这是就得加上取地址符号了

s[5][20]是由5个含20个元素的一位数组组成的二维数组;*p[5]是含有5个元素的指针数组,p[i]=s[i]这条语句就是要把s中的5个一维数组的首地址分别给p中的5个元素

二维数组s[i]表示它的列数,也就是s[0][i],他本来就是地址了,所以指针可以直接指向它即p[i]=s[i].