【C语言】指针数组、指针数组小结

  • 指针数组

指针数组是数组,是一个存放指针的数组。

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

例子:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>

int main()
{
	char *arr[4] = { "hehe", "hello", "world","100" };
	int i = 0;
	for (i = 0; i < 4; i++)
	{
		printf("%s\n", arr[i]);
	}
	system("pause");
	return 0;
}

模拟二维数组:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int arr1[4] = { 1, 2, 3, 4 };
	int arr2[4] = { 5, 6, 7, 8 };
	int arr3[4] = { 0, 0, 0, 0 };

	int *arr[3] = { arr1, arr2, arr3 };
	printf("%d\n", arr[1][2]);
	system("pause");
	return 0;
}

  • 数组指针

数组指针强调的是指针,是一个指向数组的指针。

int *p[10];//p是指针数组,先和[]结合
int(*p)[10];//p是数组指针,p先和*结合,说明p是一个指针变量,然后指向的是一个大小10个整型的数组,所以p是一个指针,指向一个数组,叫数组指针。

注意:[ ]的优先级要高于*号的,所以必须加()来保证p先和*结合。

数组指针的使用:

例子:

打印二维数组

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>

//传统方式
void C_print_arr(int arr[3][5], int x, int y)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < x; i++)
	{
		for (j = 0; j < y; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

//数组指针方式
void Z_print_arr(int (*arr)[5], int x, int y)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < x; i++)
	{
		for (j = 0; j < y; j++)
		{
			//printf("%d ", *(*(arr+i)+j));
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	int arr[3][5] = { 1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 6, 7, 8, 9, 0 };
	C_print_arr(arr, 3, 5);
	Z_print_arr(arr, 3, 5);
	system("pause");
	return 0;
}

分析一下下面代码

int arr[10] = { 0 };
arr;//表示数组首元素的地址
&arr;//表示数组的地址

printf("%p\n", arr);
printf("%p\n", arr+1);//跳过的是一个元素
printf("%p\n", &arr+1);//跳过整数组

数组的地址的存储

int arr[10] = { 0 };
int(*p)[10] = &arr;//p是数组指针,所以存放数组的地址是合适的
int main()
{
	char* arr[4];
	char* (*p)[4] = &arr;//p是一个指针,它有能力指向一个数组,数组有4个元素,每个元素的类型为char*。
	return 0;
}

分析:

1.

int arr[5];//整型数组
int *parr1[10];//整型指针的数组
int(*parr2)[10];//指向整型数组的指针,parr2是一个数组
int(*parr3[10])[5];//parr3是一个数组,存放十个类型为int(*)[5]的数组指针,每个指针可以指向一个含有五个元素的数组,元素类型为int。

2.

int main()
{
	int* arr1[10];//大小40字节,每个元素类型为int*的数组
	char*arr2[10];//大小为40字节,每个元素类型为char*的数组
	char**arr3[10];//大小为40字节,每个元素类型为char**的数组
	int(*p[10])[5];//p是一个数组,数组有10个元素,每个元素是一个数组指针,该指针能够指向一个大小为5,每个元素为int的数组。
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41562665/article/details/81347999