(以下均为我自己的理解)
数组
数组是同种元素的集合
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
【内存单元】(我自己的理解)
(由于计算机只能识别电信号转化为数字信号就是 0和 1 也就是可以存储二进制数字)
:这里内存单元要看我们的类型,以上方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个比特位)
有讲的不明白或错误的请私信或留言我看到会尽快更改
结尾
爱心代码教程请跳转: