HQS-Part4.指针、一维数组、二级指针、二维数组、指针数组、数组指针。

本文详细介绍了C语言中的指针和数组的概念及其相互关系。包括指针的定义、取地址符、间接引用符的使用,以及一维数组的声明、数组名的含义。同时探讨了指针与字符串、多级指针的区别,以及指针数组和数组指针的应用。最后,讲解了二维数组的存储方式及指针在二维数组中的应用。

一、指针

1. 指针也就是内存地址,指针变量就是存放地址的变量。

2. 定义指针变量。

格式:指针类型 + 变量名;
指针类型:目标数据类型+ “* ”,“ *"是说明符,表示指针类型;

3. & 为取地址符,功能:获取变量的地址,其结果为:原本类型 + *;

例如:int a=10;变量a的类型为int;&a 的类型为int *;

4.* 为间接引用符,功能:获取地址中目标数据值;其结果为:原本类型(指针类型)- *;

例如:
	int a=10;
	int*p=&a;
	*p的类型为int 型;
	a的值用p表示为:*p;

二、一维数组。

定义=类型+名字

1.定义:short a[8]; 变量a的类型为:short [8];数组名a;

①通常情况下,数组名表示该数组的首元素的地址:&a[0]=a;
项目&a[0]a
类型short *short *
偏移量short(2个字节)short(2个字节)

定义指针类型为 :a
short *p_a=a;//p_a的偏移量是short;
short *pa_a=&a[0];

②特殊的两种情况,代表整个数组;
1)sizeof(a)----->2*8=16个字节;
2)&a —>类型为:short () [8];&a的偏移量:short [8];&8+1—>移动short [8](2x8个字节);

定义:short (*p)[8]=&a;

3.通过数组名a 获取数组中元素的值:

short a[8];
short *p=a;//p的类型:short *;
获取数组中元素可以使用:数组名[下标];
a+0 类型为:short *
*(a+0) 类型为:short
*(a+i) 等价于a[i];
故:*()<===>[]
p=&a[0];
p+0类型为short *;
*(p+0)类型为short ,取得第一个数组第一个元素的值p[0];
*(p+i)=p[i];


三、一级指针与字符串 、多级指针

1.内存中有:常量区(只读)、栈区(可读可写)。
char buf[5]={'a','b'};//数组存储在栈区,共使用5个字节;
char *p=NULL;
p="HELLO";//"HELLO"是字符串常量,操作系统会在常量区分配6个字节
		//p中保存的是字符串常量的地址
p[0]='H';//不能在给p[0]赋值;
2.二级指针:保存一级指针的地址;
int a=20;
int *p=&a;//p为一级指针
int **pp=&p;//pp为二级指针

a 的值为:*p  =**p;

四、指针数组、数组指针

1.指针数组:本质为数组,所有元素为指针(地址);
定义:数组内元素类型 数组名[元素个数];
		short *     a[10];
		short *     b[]={&d,&c};
		short **q=NULL;
		q=a;

用法:等同于数组
	数组名[下标],数组中元素,为指针类型;
	*数组名[下标],地址所对应的数值;

数组名:a
		a=&a[0]
			a[0]的类型为:short *
		   &a[0]的类型为:short **
	结论:指针数组名用二级指针保存。
		
2.数组指针:本质是指针,指向的是整个数组;
定义: int a[8];
		&a的类型为:int (*)[8];
		int (*p)[8]=&a;

五、二维数组与指针

short a[2][3]={1,2,3,4,5,6};//看成两个一维数组
人为理解:
a[0]  1 2 3
a[1]  4 5 6
但物理存储是线性的。
数组名 a:  一个一维数组,一维数组里面又是一维数组
			把二维数组看成一个一维数组,元素分别是:
		   a[0],a[1];则该数组的首元素的地址:
		   为&a[0]等价与:a//行指针。
		   & a[0]     <===>       a
   类型:short (*)[3]      short (*)[3]
   偏移量:short [3]       short [3]
  a,a+i 等同于 行指针:short (*p)[3]=a;

数组名a[i]: 该数组的首元素的地址:
			&a[i][0]      <====>  a[i]
	类型:	short *				short *
	偏移量: short                short 
	a[i[等同于列指针  short *q =a[0];
	列指针获取元素:*(a[i]+j)  <===>*(*(a+i)+j)	;	

   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun8086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值