##C语言 --指针数组与数组指针

一.指针数组

1.简单介绍:

    就像整型数组存放整型,字符数组存放字符一样,指针数组是用来存放指针(地址)的数组

    在定义变量时,我们都知道去掉名字就是类型; 

    类比来看: int arr1[10], 去掉名字 int [10]—>[ ]说明了它是一个数组,而int说明数组中储存着的元素整型;

                     char arr2[10],同理,char [10]表明arr2是一个数组,数组中的元素是字符

    所以对于指针数组:存放指针的数组 —> int* arr[10] 存放整型指针;char* arr[10]存放字符指针...

//简单举例:
#include<stdio.h>
int main()
{
	int a = 10; // int* pa = &a;
	int b = 20; // int* pb = &b;
	int c = 30; // int* pc = &c;
	int* arr[3] = { &a,&b,&c };
	for (int i = 0; i < 3; i++)
	{
		printf("%p ", arr[i]);  //符合数组中元素在内存中连续存放
	}                         //&arr[i]内存连续变化   
	printf("\n");
	for (int i = 0; i < 3; i++)
	{
		printf("%d ", *(arr[i]));//通过指针数组找到变量地址,再解引用找到元素
	}
	return 0;
}

2.应用:

       指针数组通常在需要操作一组地址时非常有用,比如你需要传递多个指针作为参数,一个一个的传参很不方便,这时,你发现作为参数的每一个指针类型都相同,就可以先把变量的指针存到数组里,再把数组作为参数传递会方便很多。

3.指针数组模拟二维数组:

      原理:一般情况下数组名==首元素地址,把数组名储存到指针数组中,就拥有了每个数组首元素的地址,那么越过相应的内存就能找到各个元素。##C语言 --指针数组与数组指针_指针数组

arr1

1

2

3

arr2

2

3

4

arr3

3

4

5

#include<stdio.h>
int main()
{
	int arr1[5] = { 1,2,3,4,5 };
	int arr2[5] = { 2,3,4,5,6 };
	int arr3[5] = { 3,4,5,6,7 };

	int* arr[] = { arr1,arr2,arr3 };
	
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("%d ", arr[i][j]);// 等同于 *( *(arr+i) + j ) --(之前有过说明)
		}                          // arr+i 找到arr第i+1个元素;*(arr+i) 找到arr1/arr2/arr3数组名; 
		printf("\n");              // *(arr+i) + j找到整型数组中第j+1个元素的地址;*( *(arr+i) + j ) 找到第j+1个元素
	}
	return 0;
}

    

二.数组指针:

1.简单介绍:

(1)整型指针:指向整型的地址;

(2)字符指针:指向字符的地址;

(3)数组指针:指向数组的地址;

唯一需要注意的是:若int * p[10];去掉名字 int* [ ]就成了指针数组(p会和[ ]先结合)

       所以我们要让p先和*结合说明它是个指针,那么在定义数组指针时:int(*p)[10] —>int(*)[ ] 这是指针,指向(int [])整型数组;

2.数组指针的初始化:

     用&+数组名即可

   











上一篇:docker 镜像详解-六、Docker镜像的安全性


下一篇:SaaS诊所云平台管理系统源码,采用Vue 2+Spring Boot+MyBatis技术开发,开箱即用。