栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言指针进阶,一维数组和二维数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言指针进阶,一维数组和二维数组

一维数组:

void test(int arr[])    // 可行,arr是一个整型数组,创建一个整型数组接收
{}

void test(int arr[10])  //  可行,与上一种形式没有什么区别,10可以省略
{}

void test(int *arr)      //  可行,实参arr,数组名本质上是首元素的地址,而元素是int类型,所以可以用整型指针接收
{}

void test2(int *arr[20])  //  可行,实参brr,是一个存放了20个元素的数组,每个元素类型是整型指针。
{}

void test2(int **arr)     // 可行,brr是一个存放指针的数组,而brr(数组名)又是首元素的地址,

                  //第一次解引用找到brr的首元素(是一个指针),再解引用找到这个指针指向的元素
{}

int main()
{
	int arr[10] = {0};
	int* brr[20] ={0};
	test(arr);
	test2(brr);
}

二维数组:

void test(int arr[3][5])     //可行,用一个二维数组接收,行可以省略,但列不能省略
{}

void test(int * arr)         // 不可行, 不能用一个整型指针接收
{}

void test(int * arr[5])      //  不可行,这里arr是一个数组,存放了5个元素,每个元素的类型是int*,也就是存放了5个整型指针
{}

void test(int (*arr)[5])     // 可行, arr是一个数组指针,指向一个含有5个元素的数组,每个元素是int类型
{}

void test(int ** arr)        // 不可行,arr不是二级指针
{}
int main()
{
	int arr[3][5] = { 0 };
	test(arr);
}

补充:二维数组的首元素是第一行

int arr[5];             整型数组,有5个元素
int* p[10];            指针数组,存放10个整型指针的数组
int(*p)[10];           数组指针,指向一个数组,这个数组有10个元素,每个元素的类型是int
int(*p[10])[5];       p是一个存放10个指针的数组,每个指针可以指向一个数组,数组5个元素,类型是int

这里,我们可以先看名字(p)是不是和 [ ] 放在一起

比如第二个, 那么它首先是一个数组,数组存放了10个元素,每个元素的类型是int*;

第四个,首先是一个数组,有10个元素,*又代表着每个元素是指针,指针指向的也是数组,含有5个元素,元素的类型是int

而第二个,p并没有和 [ ] 直接结合,那么它首先是一个指针,指向的是含有10个元素的数组

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号