目录
一 指针和数组之间是什么关系?
指针变量就是指针变量 不是数组 指针变量大小是4/8个字节 专门用来存放地址的
数组就是数组 不是指针 数组依次连续的空间 可以存放一个或者多个类型相同的数据
联系:
数组中, 数组名是数组首元素的地址 数组名 == 地址 == 指针
当我们知道数组首元素地址的时候 因为数组又是连续存放duoy通过指针就可以遍历访问数组
数组是可以通过指针访问的
需要注意的是数组名是首元素地址 但是有两个例外:
sizeof(数组名)这里的数组名表示整个数组,计算的是整个数组的大小
&(数组名) 这里的数组名也表示整个数组,这里取出的是整个数组的地址
二 二级指针
int main()
{
int a = 0;
int* p = &a;/* p是一级指针变量 指针变量也是变量 变量在内存中是要开辟空间的 是变量就有地址 所以存进了二级指针*/
int** pp = &p;//pp就是二级指针变量,二级指针变量就是用来存放一级指针变量的地址
return 0;
}
三 指针数组
整形数组 --- 存放整形的数组
字符数组 --- 存放字符的数组
指针数组 --- 存放指针(地址)的数组
1 例一
int main()
{
char arr1[] = "abcdef";
char arr2[] = "hello world";
char arr3[] = "cuihua";
//指针数组
char* parr[] = { arr1, arr2, arr3 };
// char ** p = parr;
int i = 0;
for (i = 0; i < 3; i++)
{
printf("%s\n", parr[i]);// 拿到首元素地址 然后往下打印 遇到\0停止
}
/*char arr[] = "abcdef";
printf("%s\n", arr);*/
return 0;
}
2 例二
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 2,3,4,5,6 };
int arr3[] = { 3,4,5,6,7 };
//指针数组
int* parr[] = { arr1, arr2, arr3 };
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
//printf("%d ", *(parr[i] + j));
printf("%d ", parr[i][j]);
}
printf("\n");
}
return 0;
}
我们可以发现这很像二维数组 但是不是二维数组 因为真实的二维数组是连续的 而这个指针数组是模拟出来的
我觉得这个指针数组还是挺方便的有时候 还是非常有趣的
图书馆要闭馆了 还想继续写一下最近的学习心得 只能留到下一次有时间的时候了
继续加油!