网站建设包括哪些内容,营销外包,wordpress没有中文,创业公司做网站点击蓝字关注我们指针数组数组是一种类型的数的集合整型数组的元素都是int类型指针数组的元素都是指针变量int* arr1[10];//整型指针的数组char*arr2[10];//一级字符指针的数组char** arr3[5];//二级字符指针的数组参考这一份示意图示例1:定义多个字符指针在上一站的字符指针里…点击蓝字关注我们指针数组数组是一种类型的数的集合整型数组的元素都是int类型指针数组的元素都是指针变量int* arr1[10];//整型指针的数组char*arr2[10];//一级字符指针的数组char** arr3[5];//二级字符指针的数组参考这一份示意图示例1:定义多个字符指针在上一站的字符指针里面提到了可以直接用指针来创建一个常量字符串同理我们可以将多个指针放在一块凑成指针数组一次性创建多个指向常量字符串的指针int main()
{
char* arr[] { abcdef, qwer, zhangsan };
int i 0;
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]);//*(*(arri)j)}
printf(\n);}return 0;
}这串代码中我们需要了解的是arr[i][j]和*(*(arri)j)之间的关系以下内容若有错误还请大家在评论区指正arr[i][j]和*(*(arri)j)它们都是访问数组的形式用到了不同的操作符
但表达的含义相同下标为i、j的元素在内存中数据的存储是连续的创建一个二维数组可以看到两行的数据是连续存放在数组里面的int arr4[2][2]{{1,2},{3,4}};既然是连续的我们就可以用指针的形式来访问二维数组里面的所有元素*(arri)指向第i行元素
*(arri)j指向第i行下标为j的元素的地址
*(*(arri)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[]和二维数组的不同int*arr数组里的元素arr1arr2arr3的地址是连续存放的这里设计到一个新概念数组指针将在下一节讲解但是它们对应的各自的数组内数据并不连续如arr1和arr2这两个数组各自元素的地址并不连续示例3存放二级指针的数组既然一级指针可以放进数组里二级指针也是指针同样也能塞进数组里下面这串代码里面的arr2就是一个存放二级指针的数组#include stdio.h
int main()
{
int a 10;
int* p a;
int** pp p;
int** arr2[4] {pp};return 0;
}你学会了吗下次给大家分享数组指针哦*声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。戳“阅读原文”我们一起进步