欢迎光临
我们一直在努力

邪修C语言之指针与数组

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]获取地址等效
实验代码:

#

赞(0)
未经允许不得转载:171主机测评 » 邪修C语言之指针与数组
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址