数组指针的三种定义形式

本文介绍了三种定义数组指针的方法,并通过实例演示了如何使用数组指针遍历数组元素。第一种方法是先定义数组类型再定义指向该类型的指针;第二种方法是直接使用typedef定义数组指针类型;第三种则是直接定义数组指针而省略类型名称。

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

1.定义数组结构,然后定义数组指针。

2.定义数组指针结构

3.直接定义数组指针


//定义数组指针1
void main2201()
{
	//定义一个数组数据类型
	typedef int (MyArrayType)[5];
	int i = 0;
	//用类型定义变量
	MyArrayType myArray;
	//定义数组指针变量
	MyArrayType *pArray;     //1

	{
		int a;
		int *p=NULL;
		p = &a;
	}

	{
		int myArray2[5];
		for(i=0;i<5;i++)
		{
			myArray2[i] = i+1;
		}
		pArray = &myArray2;

		for(i=0;i<5;i++)
		{
			printf("%d\n",(*pArray)[i]);
		}
	}

	system("pause");
}
//定义数组指针2
void main2202()
{
	typedef int (*PArrayType)[5];
	int c[5] = {1,2,3,4,5};
	PArrayType pArray;
	int i = 0;
	pArray = &c;

	for(i=0;i<5;i++)
	{
		printf("%d ",(*pArray)[i]);
	}
	printf("\n");
	system("pause");
}
//定义数组指针3
void main2203()
{
	int (*PArrayType)[5];
	int c[5] = {1,2,3,4,5};
	//PArrayType pArray;
	int i = 0;
	PArrayType = &c;

	for(i=0;i<5;i++)
	{
		printf("%d ",(*PArrayType)[i]);
	}
	printf("\n");
	system("pause");
}


### 数组指针定义与用法 #### 定义 数组指针是一种特殊的指针类型,它指向一个完整的数组而不是单个元素。其语法形式为 `type (*pointer_name)[size]`,其中 `type` 是数组中元素的数据类型,`pointer_name` 是指针的名字,而 `size` 表示数组的大小[^3]。 例如: ```c int (*p)[5]; ``` 上述代码声明了一个名为 `p` 的指针,该指针可以指向一个包含 5 个整数的数组。 --- #### 使用方法 ##### 1. 初始化与赋值 要让数组指针指向某个具体的一维数组,可以通过取地址操作符 (`&`) 来实现。假设有一个一维数组 `arr`: ```c int arr[5] = {1, 2, 3, 4, 5}; int (*p)[5] = &arr; ``` 此时,`p` 就指向了整个数组 `arr`。需要注意的是,`p` 和 `arr` 虽然都表示某种意义上的“地址”,但它们的意义不同:`arr` 只是指向第一个元素的地址,而 `p` 则是整个数组的地址。 --- ##### 2. 访问数组中的元素 通过数组指针访问数组中的元素时,可以直接解引用或者使用偏移量来完成。例如: ```c printf("%d\n", (*p)[0]); // 输出第 0 个元素 printf("%d\n", (*p)[1]); // 输出第 1 个元素 ``` 这里的关键在于先解引用指针得到原始数组,然后再按照常规方式索引数组。 另一种写法也可以利用指针算术运算来进行遍历: ```c for (int i = 0; i < 5; ++i) { printf("%d ", *(*p + i)); } ``` 这种表达式的含义是对指针 `p` 解引用后加上偏移量再进一步解引用获取对应的数值。 --- ##### 3. 多维数组的情况 对于多维数组而言,数组指针的概念同样适用。比如二维数组的情形下,我们可以这样定义并初始化一个指向它的指针: ```c int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int (*ptr)[4] = matrix; // 遍历矩阵 for (int i = 0; i < 3; ++i) { for (int j = 0; j < 4; ++j) { printf("%d ", ptr[i][j]); } printf("\n"); } ``` 在这个例子中,`ptr` 指向每一行(即长度为 4 的子数组),因此可以用标准的方式逐行列举所有元素[^3]。 --- #### 总结 数组指针提供了一种更灵活的方式来处理固定尺寸的数组结构,在函数参数传递以及复杂数据结构设计中有广泛应用价值。相比普通的指针变量仅能指示单一对象的位置来说,数组指针能够更加直观地反映整体关系及其内部组成特性[^3]。 ```c #include <stdio.h> int main() { int array[5] = {10, 20, 30, 40, 50}; int (*array_ptr)[5] = &array; // 打印数组的第一个元素 printf("First element via pointer: %d\n", (*array_ptr)[0]); // 遍历打印全部元素 for (int i = 0; i < 5; ++i) { printf("Element at index %d is %d\n", i, (*array_ptr)[i]); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值