C语言第九章指针

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int main(int argc, char *argv[]) {
	
//	//回顾 
//	//如果mypoint存放的是变量i的地址值,则称mypoint是指针变量 重点是变量
//	//地址就是指针 指针就是地址值 
//	
//	//一.指针变量的定义 
//	//变量的指针就是变量的地址。我们可以定义一个指向指针的变量(普通变量)的指针变量。
//		//这种指针变量 我们在定义的时候 会引入一个* 在定义中,表示这是一个指针变量;	
//	
//	//指针变量的一般形式:
//	//类型标识符 *标识符;  标识符:就是指针变量名字 
//	int i,j;//普通变量 
//	float k;//普通变量 
// 	//定义指针变量
//	int *mypoint1,*mypoint2;//定义两个指针变量 这两个指针变量 指向整型变量的。 
//							//指针变量定义时,变量名前面有个*,在这个是和普通变量最明显的区别 
//	float *pm3;//指向实型变量的指针
//	float *pm4;//指向实型变量的指针
//	//如何让整型指针变量指向一个整型变量 可以用赋值语句使一个整型指针变量指向一个整型变量(普通变量) 
//	mypoint1 = &i;  //&是地址符 等价于mypoint1指向了i;  它本身也有地址值 
//	mypoint2 = &j;  //等价于mypoint2指向了j;
//	//什么样的指针变量需要什么样的整型来赋 因为所占的字节数相同 
//	
//	//说明:
//	//1大家注意:我"定义"指针变量的时候,指针指针变量前是有*的,表示这是正在定义一个指针变量。 
//		//但是 我用指针变量的时候 指针变量名前是没有*的,所以指针变量是mypoint1,mypoint2;而不是带*的 
//	//2一个指针变量只能指向同一个类型的变量(普通变量)
//	pm3 = &k;
//	
//	//二.指针变量的引用
//	//牢记:指针变量中只存放地址 不要将一个整型变量赋值给一个指针变量
//	//mypoint = 4 在这里就是不行 不可以赋值这个整型变量 他只能存放地址 
//	//mypoint是个指针变量
//	
//	//和指针变量相关的
//	//(1)&: 取地址运算符 scanf(); 
//	//(2)*:指针运算符(间接访问运算符)
//		//a)乘法运算符 3*4;
//		//b)指针运算符 定义时指针变量时 我们用到了*;
//		 
//	//但是若这个*不出现在指针变量 定义的场合,而且也不是个乘法运算,那么这个*是啥意思?
//	//依旧是指针运算符。 
//		//只不过代表的是指针变量所指向的变量 
//	
//	int a,b; 
//	int *p1,*p2; //这里的这个*表示这两个变量是两个指针变量
//	a = 100; 
//	b = 200;
//	p1 = &a; //把变量a的地址付给了p1   现在p1指向了a; 
//	p2 = &b; //把变量b的地址付给了p2   现在p2指向了b; 
//	
//	printf("%d,%d\n",a,b); 
//	//*指针运算符不用于 定义指针变量的场合时 代表的是他指向的变量 
//	printf("%d,%d\n",*p1,*p2); //*p1 = a ,*p2 = b; 
//	//*p1 *p2代表的是原有值,而p1 p2指的是地址值
//	
//	//--------解析:
//	//a)&*p1: &取地址运算符 *指针运算符: 这两个运算符 优先级是相同的
//		//但是他们两个运算符是从右到左结合的
//		//先看*p1,  *p1代表的是p1所指向的变量 其实就是A运算时,其实这个 &*p等价于了&a;
//		//又因为&a本身就是p1 所以&*p1等于啥也没干 
//		//所以:p1 = &*p1; <=> p1 = &a; 
//		//如果是p2 = &*p1;//等价于指针变量p2指向了a; 
//	//b)*&a:从右向左看
//		//&a = p1 然后:*p = a; 
//	//c)(*p1) ++; => a++;
//	//d)*p++; //++ * 同级 从右到左结合 
//	//所以 *p++等价于 *(p1++);  
//	//p1++;的意思是p1指向的是后面的内存:地址值 + 4; 
//	//老师曾经说过 地址是个数字 地址自加1啥意思 
//	//如果普通整型变量i,那么i++,如果是4 那么i++变成5 
//	//同理,指针变量自加一 也肯定是这哥指针变量中的内容要自加 
//	//但是 本来这种自加1的操作 对于指针来讲 
//	//就不一定是自加1 自加几取决于该指针变量所指向的变量类型 
//	//如果p指向的是整型变量 那么p++的内容要加4 因为本身p是int类型 
//	//因为int是4个字节 
//	//p1++意味着p1多指向i之后的变量 
//	//要完整跳过四个字节 所以p++后内存内容如下:
//	//*(p1++)不再指向A了 他就指向A后面的内存去了 
//	//所以*p++这个动作相当危险 
	
	//范例:
	int *pmax,*pmin,*p,a,b; //pmax指向大的值 pmin指向小的值 
	a = 5; 
	b = 8; 
	pmax = &a;
	pmin = &b; 
	if(a<b){
		
		//为了演示指针变量的赋值 老师写的啰嗦一点 
		p = pmax;//p指向a 
		pmax = pmin; //把p地址当做中间变量 
		pmin = p;
				
	}
	printf("max = %d,min = %d\n",*pmax,*pmin);  
	//变量a,b的值并没有变 只是改变了pmaxpmin指针的的指向
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值