|

楼主 |
发表于 2021-7-21 22:18:23
|
显示全部楼层
本帖最后由 酱油王 于 2021-7-21 22:59 编辑
我看了鱼小c大哥的视频后,我理解的是数组名就是存放这个数组的首地址的“指针”(我知道数组不是指针,所以打了双引号),指针和数组名的区别就是数组名存放的地址不能改变了,但指针可以,这是我用以下代码得出的结果。
//用的是dev c++ 5.1
//这是数组的
#include <stdio.h>
int main(int argc,char *argv[])
{
char one[10]="qwertyuiop";
one++; /*编译时在这里提醒报错:[Error] lvalue required as increment operand
所以我以此来判断数组不是一个左值,因为数组名里存放的地址不能改变;
printf("%c",one);
return 0;
}
但是指针时就可以,这是指针的
#include <stdio.h>
int main(int argc,char *argv[])
{
char *one="qwertyuiop";
one++;
printf("%c",*one); //打印的值为'w',也就是说指针里存放的地址往后加了一个字节。
return 0;
}
然后我又试了二维数组,同样提示我这个数组名不是一个左值。
#include <stdio.h>
int main(void)
{
int one[2][3]={1,2,3,4,5,6};
one++; //也是在这一行报错提示不是左值
printf("%d",**one);
return 0;
}
然后我又试了数组指针,数组指针存放的地址也可以改变
#include <stdio.h>
int main(void)
{
int one[2][3]={1,3,5,7,9,11};
int (*a)[3]=one;
a++;
printf("%d",**a); //打印内容为7,也就是说存放的地址往后加了3个int的长度。
return 0;
}
所以我自己总结后感觉二维数组不是左值,数组指针是左值。 |
|