2.9、数组指针与二维数组

移动的字节单位 = n * 数据类型(*p)字节单位;指针与常量进行算数运算后,仍然是一个指针;

分级
一个 * 为一级,一个 []一级

升级
取&升级
int b是一个元素,&b就是一个一级指针)

降级
1、使用时和[]降级
int b[3];b是一级指针,b[0]是元素
2、定义时
和[]升级
int b是一个元素,int *b是一个b是一个一级指针,int b[10]的b是一个一级指针或者是一维数组

指针与二维数组
int arr[2][3] = {{1,2,3},{4,5,6}};
1、 二维数组的数组名记录的是数组的行首地址

2、数组的行首地址就是第一个数组的首地址,第一数组的首地址就是第一个变量的地址

3、数组名+1跨越的是一行(一个数组)的大小

二维数组
数组名
1、代指这个数组。
2、代指数组首地址二维数组的数组名 可以使用一个数组指针来存放;
例:
int a[3][4];
int (p)[4] = a; p++ 移动16个字节: 1 4*4
在这里插入图片描述
在这里插入图片描述

指针数组
是一个数组,该数组中的每一个元素是一个指针
int *p[3]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数组指针
本质是一个指针,指针指向指定大小的数组,指针偏移一个地址将会偏移指定数组大小元素的字节,指针指向一个数组,数组指针的移动方式跟二维数组的数组名移动方式是一致的,所以说数组指针可以指向一个二维数组
1、int (p)[3] // 指向元素的元素个数 元素类型 ( 指针名 )[数组的元素个数];
2、 int a[3][10]; int (*p)[10];

指向元素a[0]的元素个数10
指向数组 p = &a; —数组指针
*a—a[0] 是数组不能 赋值++ –

((pa+1)+2) //pa指向a[0];pa+1 指向a[1];(pa+1)指向a[1][0]=4;(pa+1)+2 = 6;((pa+1)+2) = 6

*pa)++ //错误 *pa 取出a[0],是数组

((pa+1)+2)+2 //pa指向a[0];pa+1 指向a[1];(pa+1)指向a[1][0]=4;(pa+1)+2 = 6;((pa+1)+2) = 6;((pa+1)+2)+2 = 8

#include <stdio.h>
int main(){    
	//二维数组    
	int a[3][4] = {
		{0,1,2,3},
		{4,5,6,7},
		{8,9,10,11}
	};   
	 
	//数组指针    
	int (*pa)[4];    
	pa = a;   
	 
	//a使用    
	printf("**a = %d\n",**a);    
	printf("*(*a+2) = %d\n",*(*a+2));  
	  
	//pa使用    
	printf("**pa = %d\n",**pa);    
	printf("**(pa+1) = %d\n",**(pa+1));    
	printf("*(*(pa+1)+2) = %d\n",*(*(pa+1)+2)); 
	//pa指向a[0];pa+1 指向a[1];*(pa+1)指向a[1][0]=4;*(pa+1)+2 = 6;*(*(pa+1)+2) = 6                         
	
	printf("*(*(pa+1)+2)+2 = %d\n",*(*(pa+1)+2)+2); //pa指向a[0];pa+1 指向a[1];*(pa+1)指向a[1][0]=4;*(pa+1)+2 = 6;*(*                           (pa+1)+2) = 6;*(*(pa+1)+2)+2 = 8        
	printf("**(++pa) = %d\n",**(++pa));    
	return 0;
}

3、对p 可以使用指针的所有操作,也可以当二维数组来使用 (*p) 代指指向的数组,所以,不能进行赋值操作

4、 int a[10]; int *p;
指向元素 p = a; —一级指针

关系图
在这里插入图片描述
p可以指针操作,*p是数组
p和 *p都是指针

可以赋值
1、a是一个数组,也是一个二级指针;pa = a: pa指向a[0]-- 一个指针指向一维数组是数组指针
在这里插入图片描述
2、p是一个指针数组,也是一个二级指针;ps = p : ps 指向 p[0] —一个指针指向一级指针是二级指针
在这里插入图片描述
3、 pa[0]是一个数组也是指针,不能指针赋值操作; p[0]只是一个指针
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41110647/article/details/106316857