老九C语言第42课指针

· 指针(pointer)
	·指针是一个值为内存地址的变量(或数据对象)
		指针是一个变量
		指针是用来存放内存地址的
		指针(地址)是16进制
		

· 定义指针

		int 	定义整型
		int*	定义指针
		
		int  year
		int* ptr_year	//最好加上"ptr",即这是一个指针型变量
		
		
· NULL<stdio.h>中,NULL被定义为常量
		int* ptr_num = NULL;
		指针初值设为空,表示指针不指向任何地址
	
	
· 应用:
		单机游戏中修改内存
		很危险
		
· 取地址符&
	
			#include <stdio.h>
			#include <stdlib.h>
			
			int main()
			{
				int num = 9;
				int* ptr_num = &num;  //指针的标准赋值方式
				printf("num 变量的地址是:%p\t%x\n", ptr_num,ptr_num); //%p是打印指针型变量 BTW:%x是16进制占位符
				return 0;
			}
			
			
			
			//运行结果***********************************************
			num 变量的地址是:0060FF0C      60ff0c
			
			Process returned 0 (0x0)   execution time : 4.901 s
			Press any key to continue.
			//运行结果***********************************************
			说明了指针即16进制	
			
			不可以	int* ptr_num = 0060FF0C;  进行赋值,必须用 & 符号进行赋值
			
·间接运算符*(取值符)

			'*'就是取这个地址的值
			根据地址找到对应空间所赋的值
			
			#include <stdio.h>
			#include <stdlib.h>
			
			int main()
			{
				int num = 9;
				int* ptr_num = &num;  //指针的标准赋值方式
				printf("num 变量的地址是:%p\t%x\n", ptr_num,ptr_num); //%p是打印指针型变量 BTW:%x是16进制占位符
				printf("*ptr_num对应的值为: %d\n", *ptr_num);//取这个地址对应的值
				return 0;
			}
			
			//运行结果***********************************************
			num 变量的地址是:0060FF08      60ff08
			*ptr_num对应的值为: 9
			
			Process returned 0 (0x0)   execution time : 3.090 s
			Press any key to continue.
			//运行结果***********************************************			

		
·使用指针修改变量值
				
			#include <stdio.h>
			#include <stdlib.h>
			
			int main()
			{
				int num = 9;
				int* ptr_num = &num;  //指针的标准赋值方式
				printf("num 变量的地址是:%p\t%x\n", ptr_num,ptr_num); //%p是打印指针型变量 BTW:%x是16进制占位符
				*ptr_num = 9999;
				printf("*ptr_num对应的值为: %d\n", *ptr_num); //取这个地址对应的值
				return 0;
			}

			
			//运行结果***********************************************			
			num 变量的地址是:0060FF08      60ff08
			*ptr_num对应的值为: 9999
			
			Process returned 0 (0x0)   execution time : 3.103 s
			Press any key to continue.
			//运行结果***********************************************			
			
			
·指针的地址		
			
			#include <stdio.h>
			#include <stdlib.h>
			
			int main()
			{
				int num = 9;
				int* ptr_num = &num;  //指针的标准赋值方式
				//头疼点:指针的地址
				int* ptr_num2 = &ptr_num;
			
				printf("num 变量的地址是:%p\t%x\n", ptr_num,ptr_num); //%p是打印指针型变量 BTW:%x是16进制占位符
				printf("指针ptr_num的地址是: %p\n", ptr_num2);//取指针的地址
				return 0;
			}
			
	
			//运行结果***********************************************			
			num 变量的地址是:0060FF08      60ff08
			指针ptr_num的地址是: 0060FF04
			
			Process returned 0 (0x0)   execution time : 3.870 s
			Press any key to continue.
			//运行结果***********************************************		
			

·通过指针的指针找到原空间数值

			#include <stdio.h>
			#include <stdlib.h>
			
			int main()
			{
				int num = 9;
				int* ptr_num = &num;  //指针的标准赋值方式
				//头疼点:指针的地址
				int** ptr_num2 = &ptr_num; //注意这里必须是两个*
			
				printf("num 变量的地址是:%p\t%x\n", ptr_num,ptr_num); //%p是打印指针型变量 BTW:%x是16进制占位符
				printf("指针ptr_num的地址是: %p\n", ptr_num2);//取指针的地址
				//如何通过指针的指针,访问到原指针指向的空间?
				printf("原空间num对应的值是:%d\n",**ptr_num2); //**ptr_num2
				return 0;
			}
			//运行结果***********************************************						
			num 变量的地址是:0060FF08      60ff08
			指针ptr_num的地址是: 0060FF04
			原空间num对应的值是:9
			
			Process returned 0 (0x0)   execution time : 0.216 s
			Press any key to continue.
			//运行结果***********************************************			
	

猜你喜欢

转载自blog.csdn.net/cxd15194119481/article/details/84896498