指针和一维数组之间的关系数组的引用方法指针的运算

Posted 軒邈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针和一维数组之间的关系数组的引用方法指针的运算相关的知识,希望对你有一定的参考价值。

/*
	2022.06.07
	目的:
		学习指针和一维数组之间的关系
	理论:
		1.关系
			a.数组是多个相同类型的变量的集合;
			b.每一个变量都占内存空间,都有自己对应的地址编号;
			c.指针变量也当然可以存放数组元素的地址;
			d.数组的名字表示的数组第一个元素的地址,如果是整型的数组,那么也就是第一个元素的第一个字节的内容的地址编号;
			e.那么在用指针对数组进行操作的时候,数组第一个元素的地址即数组名就代表整个数组的地址。
		
		2.数组元素的引用方法
			(1)数组名[下标]
				int a[5];
				a[2] = 100;

			(2)指针名加下标
				int a[5];
				int *p;
				p = a;
				p[2] = 100; //相当于 a[2] = 100;

				注意:
					a.c语言规定:数组的名字就是数组的首地址,即第0个元素的地址,就是&a[0],是个常量。
					b.p和a的不同,p是指针变量,而a是个常量。所以可以用等号给p赋值,但不能给a赋值。
			
			(3)通过指针变量运算加取值的方法来引用数组的元素
				int a[5];
				int *p;
				p=a;
				*(p+2)=100;//也是可以的, 相当于 a[2]=100
				
				注意:
					a.p是第0个元素的地址;
					b.p+2 是 a[2] 这个元素的地址。
			
			(4)通过数组名+取值的方法来引用数组的元素
				int a[5];
				*(a+2)=100; //也是可以的, 相当于 a[2]=100;
				注意: a+2 是 a[2]的地址。 这个地方并没有给 a 赋值。

		3.指针的运算
			(1)指针可以加一个整数,然后指向下一个地址;
				int a[5];
				int *p;
				p=a;
				p+2;//p 是 a[0]的地址,p+2 是&a[2]
				假如 p 保存的地址编号是 2000 的话, p+2 代表的地址编号是 2008
				注意:
					指针指向数组元素的时候,加一个整数才有意义;

			(2)两个相同类型的指针可以比较大小
				a.指针类型是相同的;
				b.并且是指向同一个数组的元素;
				c.指向前面元素的指针是 小于 指向后面元素的指针

			(3)两个相同类型的指针可以做减法
				a.指针类型相同;
				b.并且指向同一个数组的元素;
				c.做减法的结果是两个指针指向的中间有多少多个元素。
			
			(4)两个相同类型的指针可以相互赋值
				a.指针类型相同(通用型指针 void* 类型除外);
				b.指针类型不相同,如果要进行赋值就需要进行强制类型转换。

*/

#include<stdio.h> 

int main(void)


/* 例子: (2)两个相同类型的指针可以比较大小 */
#if 0
	int a[10];
	int* p, * q; 

	p = &a[1];
	q = &a[6];

	if (p < q)
	
		printf("Line: %d, p < q\\n", __LINE__);
	
	else if (p > q)
	
		printf("Line: %d, p > q\\n", __LINE__);
	
	else
	
		printf("Line: %d, p == q\\n", __LINE__);
	
#endif 
/* 例子: (3)两个相同类型的指针可以比较大小 */
	int a[5];
	int* p, * q;
	p = &a[0];
	q = &a[3];
	printf("Line: %d, %d\\n", __LINE__,  q - p);

	return 0;


/*
	程序运行结果:
		Line: 74, p < q
		Line: 95, 3
*/

以上是关于指针和一维数组之间的关系数组的引用方法指针的运算的主要内容,如果未能解决你的问题,请参考以下文章

指针和一维数组之间的关系数组的引用方法指针的运算

指针与一维数组和二维数组以及字符串指针数组的学习笔记

你比昨天更懂指针了吗?

数组和指针,内存之间的关系

C基础指针的使用

C语言学习 -- 指针