C语言学习笔记_指针和数组

C语言学习笔记_指针和数组

数组中关键符号的含义

int a[10];
a;				//a是数组名称,a不能做左值,a做右值表示数组首元素的首地址(&a[0]) 
a[0];			//a[0]表示数组的首元素,左值表示数组第0个元素对应的内存空间,做右值表示元素的值
&a;				//&a为数组的地址,不能做左值,做右值表示数组的首地址
&a[0];			//&a[0]是数组第0个元素的首地址,表示首元素对应的内存空间

为什么数组的地址不能做左值呢,因为数组的地址在编译器分配后就变成了常量,不可更改,所以不能做左值;

指针访问数组

int a[10];
int *p;
p = a;			//正确
p = &a;			//错误,类型不兼容
int x = a[m];	//数组访问方式
int y = *(p+m);	//指针访问方式

从上一节可知,a做右值表示数组首元素首地址,在这里类型为int *,和p的类型兼容;

而&a为数组的地址,类型为 int (*)[10],和p的类型不兼容;

强制类型转换

对于char、int等属于兼容性类型,转换可能出错,也可能不会出错;

float、double属于不兼容类型,转换肯定出错;

sizeof运算符

char str[] = "hello";
char *p = strl
printf("sizeof(p) = %d.\n", sizeof(p));		//4,指针变量的长度固定为4
printf("sizeof(*p) = %d.\n", sizeof(*p));	//1,char类型的长度为1
printf("sizeof(str) = %d.\n", sizeof(str));	//6,数组长度为6,因为还有\0
printf("strlen(p) = %d.\n", strlen(p));		//5,strlen不计算\0

另外,将数组作为参数传入函数的时候,将会传入数组首地址的指针变量,即函数内部无法获取数组的长度

posted @ 2020-06-24 10:50  樱花小猪  阅读(168)  评论(0编辑  收藏  举报