Talk about array pointers and pointer arrays

●数组指针
所谓数组指针就是一个指向数组的指针,就这么简单。

代码如下:

分别定义一个一维数组和一个数组指针,并打印一系列的地址

	int a[5];
	int(*arr)[5];
	arr = &a;  //arr数组指针指向a数组的起始地址
	printf("&a[0]: %p\n", a);//一维数组首元素地址
	printf("&a   : %p\n", &a);//一维数组的地址
	printf("arr  : %p\n", arr);//一维数组的地址
	printf("arr+1: %p\n", arr + 1);//指针(地址)加1,加上所指内容类型的大小,即加上一个数组的大小
	printf("&a[0]+1: %p\n", a + 1);//指针(地址)加1,加上所指内容类型的大小,即加上一个整形的大小
	printf("&a+1 : %p\n", &a + 1);//指针(地址)加1,加上所指内容类型的大小,即加上一个数组的大小
	
打印截图如下:

Insert picture description here

举一个例子来感受一下数组指针的用法:
求一串字符串中最长的字符串,需要用到一个二维数组,数组传参,
形参则为数组指针

#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)

char* fun(char(*arr)[20], char *max)
{
    
    
	max = arr[0];//指针指向字符串的起始地址
	int i = 0;
	for (i = 1; i < 5; i++)
	{
    
    
		if (strlen(max) < strlen(arr[i]))//字符串依次进行长度比较
		{
    
    
			max = arr[i];
		}
	}

	return max;

}
int main()
{
    
    
	char str[5][10] = {
    
     "asdfgh", "qwer", "zxc", "poiuy", "bhtfdes" };
	char *p = NULL;
	char *max = fun(str, p);
	printf("%s\n", max);
	return 0;
}


●指针数组

char *arr[10];
顾名思义,就是一个存放多个指针作为数组内容的数组,在表现形式上
与数组指针char(*arr)[20]有些像,要注意区别.

Guess you like

Origin blog.csdn.net/cfk17829572643/article/details/111587450