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

本文深入探讨C语言中的一维和二维数组以及指针的使用。介绍了如何声明和理解不同类型的数组指针,包括一维数组指针、二维数组指针以及数组的首元素特性。内容涵盖了int arr[5]、int* p[10]、int(*p)[10]和int(*p[10])[5]等类型的详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一维数组:

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个元素的数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值