数组,指针,指针数组,数组指针

本文介绍了C语言中的数组、指针的基本概念,包括数组作为同种元素的集合,指针存储地址并用于访问内存单元。文章详细讲解了指针数组和数组指针的差异,并提到了二维数组的内存存储方式。还讨论了如何使用指针操作数组,特别是对于大量数据的情况。
摘要由CSDN通过智能技术生成

(以下均为我自己的理解)

  • 数组

数组是同种元素的集合

int arr[6] = {1,2,3,4,5,6};

int 数组的类型 , arr 数组名 , [6] 这里的6代表有多少个这种类型单元

数组名是首元素地址 但在两种情况除外 1. sizeof(数组名)表示整个数组

2. &数组名 表示取得数组的地址

  • 指针

指针变量里存地就是指针也就是地址

这个指针(地址)可以用来找到它所指向的那个唯一的内存单元

int a= 20;
int* pa = &a;  //创建了一个指针变量pa 并且把a的地址赋予给pa ,由于a是int所以pa要为int*
*pa = 10;   //对pa进行解引用(通过pa里存的地址找到a变量的内存单元)进行更改为10

【内存单元】(我自己的理解)

(由于计算机只能识别电信号转化为数字信号就是 01 也就是可以存储二进制数字)

:这里内存单元要看我们的类型,以上方a变量为例,a是整形是4个字节也就是32个二进制位,那么内存单元也就是32个二进制位这个4字节的空间

  • 指针数组

这个其实是数组比如你还学过整形数组 ( int arr[] ) 和 字符数组 ( char ch[] )

指针数组( int* parr[] / char* pch[] )

指针数组是同一种指针类型的集合

int a= 10;
int b=20 , c=30;
int* p[3] = { &a, &b. &c};  //可以但没必要

//少的时候可以用上面的但如果数据多的时候呢

int arr[5] = { 1, 2, 3, 4, 5};
int* parr[5];
for(int i=0; i<5; i++)
{
    parr[i] = &arr[i]; 
}
  • 数组指针

指针数组还是指针只不过是用来存储数组的地址

int arr[4];
int* pa= arr;        //把arr这个数组首元素的地址存入pa这个变量中
int (*parr)[4] = &arr;  //parr中就存放了数组的地址
                         //(*parr)和arr是等价的
printf("%d ",*(*parr));  //打印的是arr[0]的值
                           //如何打印整个数组的值呢
for(int i=0;i<4 ;i++)
{
    printf("%d ",*((*parr)+i));  //这里的*parr完全可以写pa嘛,这不脱裤子放屁吗
}

其实指针数组可以用在访问二维数组中

  • 补充【二维数组】

int a[3][4];   //表示一个3行4列的int类型的元素集合

下图是二维数组在内存单元中的存储

二维数组的数组名表示第一行的地址

二维数组在内存中是连续存储的

一个内存单元是4字节(32个比特位)

有讲的不明白错误的请私信留言我看到会尽快更改

  • 结尾

爱心代码教程请跳转:

https://blog.csdn.net/WS_IT1/article/details/129220270

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值