C语言之指针与数组
-
- 数组与内存
- 数组指针
- 数组指针与普通指针对比
-
- 能否被=号赋值
- 数组指针之间与指针的等效关系
- 如何邪修理解记忆
- 指针,数组指针与sizeof
-
- sizeof
- sizeof计算数组指针和数组
- sizeof与数组指针的注意事项
数组与内存
数组是一组相同类型的元素的集合,这些元素在内存中是连续的,可以通过数组名和下标的方式进行访问。
#include<stdio.h>
int main(void){
int a[5] = {
1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++){
printf(\”%p \”, &a[i]);
printf(\”\\n \”);
}
return 0;
}
使用上述的代码,可以查看数组中每个元素的起始地址,如上图所示,每一个地址都是连续的,它们都刚好间隔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]获取地址等效
实验代码:
#
