C语言之指针与数组
- 数组与内存
- 数组指针
- 数组指针与普通指针对比
- 能否被=号赋值
- 数组指针之间与指针的等效关系
- 如何邪修理解记忆
- 指针,数组指针与sizeof
- sizeof
- sizeof计算数组指针和数组
- sizeof与数组指针的注意事项
数组与内存
数组是一组相同类型的元素的集合,这些元素在内存中是连续的,可以通过数组名和下标的方式进行访问。#include<stdio.h>intmain(void){inta[5]={1,2,3,4,5};for(inti=0;i<5;i++){printf("%p ",&a[i]);printf("\n ");}return0;}
使用上述的代码,可以查看数组中每个元素的起始地址,如上图所示,每一个地址都是连续的,它们都刚好间隔4个字节也就是一个int类型的大小。
在图中,a和&a[0],a+i和&a[i]是等效的,可以自己去尝试一下打印其内容查看。
数组指针
数组指针是指数组在内存中的起始地址,数组元素的地址是指数组元素在内存中的起始地址。 一维数组的数组名为一维数组的指针。数组指针与普通指针对比
能否被=号赋值
一维数组的数组名为一个常量,不能被修改,也就是说不能作为=号的左值。而指针是变量,可以在=号左边被进行赋值操作。
常量被存放在数据段(data段),data段为只读段是不可以对其进行写操作的。
简单来说,p++;可以a++;是不行的。
也可以这样理解,以上述的代码为例假设int*p=a,p的类型为int *,
而a的类型为int *,但是由于它是数组指针,可以将其理解为隐藏了一个const,也就是说a是一个被const修饰的int *,其值是不能被修改的。
等价于const int *p;
数组指针之间与指针的等效关系
数组指针之间与指针的等效关系,包括获取内存中的值等效和读取指针存储的地址的方式等效。 1.p[i],a[i],*(a+i),*(p+i)取值等效 2.p+i,a+i,&p[i],&a[i]获取地址等效 实验代码:#