0
点赞
收藏
分享

微信扫一扫

指针数组(21)

指针数组

  • 数组是一种类型的数的集合
  • 整型数组的元素都是int类型
  • 指针数组的元素都是指针变量

int* arr1[10];//整型指针的数组
char*arr2[10];//一级字符指针的数组
char** arr3[5];//二级字符指针的数组

指针数组的元素都是指针变量,参考如下:

int *arr[6]={int * ,int * ,int * ,int * ,int * ,int * };
char *arr2[6]={char * ,char * ,char * ,char * ,char * ,char * };
char **arr2[6]={char ** ,char ***** ,char **** ,char *** ,char ** ,char ** };

示例1:定义多个字符指针

由于字符指针里面,可以直接用指针来创建一个常量字符串;

同理,也可以将多个指针放在一块,凑成指针数组,一次性创建多个指向常量字符串的指针。

指针数组:char* arr[] = { "abcdef", "qwer", "zhangsan" };
arr
-----------
| char* |--------> "abcdef\0"
| char* |--------> "qwer\0"
| char* |--------> "zhangsan\0"
-----------

int main(){
char* arr[] = { "abcdef", "qwer", "zhangsan" };
char* arr[] = { "abcdef", "qwer", "zhangsan" };
int sz = sizeof(arr) / sizeof(arr[0]);

for (i = 0; i < sz; i++){
printf("%s\n", arr[i]);
}

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* arr[] = {arr1, arr2, arr3};//arr是指针数组

int i = 0;
for (i = 0; i < 3; i++){
int j = 0;
for (j = 0; j < 5; j++){
printf("%d ", arr[i][j]); //*(*(arr+i)+j)
}
printf("\n");
}

return 0;
}
//这串代码中,要了解的是arr[i][j]和*(*(arr+i)+j)之间的关系

arr[][]和*(*(arr+i)+j)

//关于arr[i][j]和*(*(arr+i)+j)
它们都是访问数组的形式,用到了不同的操作符
但表达的含义相同:下标为i、j的元素

在内存中,数据的存储是连续的

创建一个二维数组,可以看到两行的数据是连续存放在数组里面的

int arr4[2][2]={{1,2},{3,4}};

既然是连续的,就可以用指针++的形式来访问二维数组里面的所有元素

*(arr+i)指向第i行元素
*(arr+i)+j指向第i行下标为j的元素的地址
*(*(arr+i)+j)再次解引用,得到j元素

数组名的本质是地址,是该数组首元素的地址

二维数组的首元素是第一行,数组名arr就是第一行的地址

我们可以把二维数组的每一行理解为独立的一个一维数组

这时候,二维数组的形式和上述代码中int* arr[]数组的形式就相同了

int arr1[] = { 1,2,3,4,5 };  
int arr2[] = { 2,3,4,5,6 };
int arr3[] = { 3,4,5,6,7 }; //arr1 arr2 arr3是二维数组里面的每一行

int* arr[] = {arr1, arr2, arr3}; //arr等价于一个二维数组,但有不同

:int*arr数组里的元素arr1,arr2,arr3的地址是连续存放的

示例3:存放二级指针的数组

既然一级指针可以放进数组里,二级指针也是指针,同样也能塞进数组里

下面这串代码里面的arr2就是一个存放二级指针的数组

#include <stdio.h>
int main(){
int a = 10;
int* p = &a;
int** pp = &p;
int** arr2[4] = {pp};

return 0;
}

------------END------------



举报

相关推荐

0 条评论