标签:pause lib color str 变量 etc getch include 三级
二级指针的作用:
1.函数改变外部变量指针
2.外挂改变一个指针的值
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void main(){ 5 int a = 10; 6 int b = 20; 7 int *p1 = &a; 8 int *p2 = &b; 9 int **pp = &p1; 10 printf("%d,", **pp); 11 printf("\n%x,%x,%x", p1, *pp,&a); 12 pp = &p2; 13 printf("%d,", **pp); 14 printf("\n%x,%x,%x", p2, *pp, &b); 15 printf("\n%d,%d", *p2, b); 16 17 system("pause"); 18 }
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void main(){ 5 int a[] = { 1, 2, 3, 4, 5, 6, 7 }; 6 printf("%d", sizeof(a));// 28. C语言规定,数组地址整体大小 7 printf("\n%d", sizeof(a)/sizeof(int)); 8 9 int *p = a; 10 printf("\n%d", sizeof(p)); 11 //a = p + 1; =”: 左操作数必须为左值:a是一个常量,不能作为左值 12 printf("\n%x,%x", a,p); 13 //数组名就是一个常量指针,p是变量指针, 14 //中括号可以根据指针的地址往下找出内容 15 //数组的本质就是一片连续的内存,数组名就是地址 16 for (int i = 0; i < 7; i++) 17 { 18 printf("\n%d,%x", p[i], &p[i]); 19 printf("\n%d,%x", *(p+i),p+i); 20 //p+i p往前移动i个元素的地址 21 // *(p+i) p往前移动i个元素 22 } 23 printf("\n\n"); 24 for (int *px = a; px < a + 7; px++) 25 { 26 printf("\npx=%x,*px=%d", px, *px); 27 } 28 29 system("pause"); 30 }
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 //C程序分配给全局变量内存后,才启动main函数 5 int a=10; 6 int *p1=&a; 7 int b=20; 8 int *p2=&b; 9 10 void change(int **pp){//新建一个二级指针,指向P2;不会改变原来指针指向的地址 11 pp=&p2; 12 printf("change pp=%x\n",pp); 13 } 14 15 void changeA(int ***ppp){ 16 *ppp=&p2; 17 } 18 19 void main(){ 20 int **pp=&p1; 21 printf("main pp=%x\n",pp); 22 change(pp); 23 printf("%d\n",**pp); 24 changeA(&pp); 25 printf("%d\n",**pp); 26 getchar(); 27 }
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<Windows.h> 4 5 void msg(){ 6 MessageBoxA(0,"open","阿飞在泡妞",0); 7 } 8 9 int add(int a,int b){ 10 system("tasklist"); 11 return a + b; 12 } 13 14 void main(){ 15 int numA=100; 16 int numB=20000; 17 int *p1 = &numA; 18 int *p2 = &numB; 19 int **pp=&p1; 20 char str[5] = { ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘ }; 21 char *pch=str; 22 //printf("%x,%x\n",msg,add); 23 printf("%x,%x\n",&numA,&numB); 24 printf("&p1=%x,&p2=%x,&pp=%x,&pch=%x,str=%x\n",&p1,&p2,&pp,&pch,str); 25 while (1) 26 { 27 printf("阿飞的目标是泡%d个妞\n",numA); 28 printf("阿飞的月薪是%d元\n",numB); 29 printf("阿飞已经泡了%d个妞\n",*p1); 30 printf("阿飞希望的RMB%d元\n", **pp); 31 printf("阿飞在泡妞届的级别%c\n",*pch); 32 Sleep(25000); 33 printf("\n"); 34 } 35 36 37 38 system("pause"); 39 }
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<Windows.h> 4 _declspec(dllexport) void go(){ 5 while (1) 6 { 7 void(*p)()=(void(*)())0x11010f5; 8 p(); 9 Sleep(5000); 10 } 11 } 12 13 _declspec(dllexport) void goA(){ 14 int (*p)(int,int)=(int (*)(int,int))0x1191096; 15 printf("%d\n",p(10,30)); 16 system("title 马化腾"); 17 system("color 5E"); 18 } 19 20 _declspec(dllexport) void goB(){ 21 system("color 5E"); 22 //改变两个变量:numA,numB 23 int *p1=(int *)0x43f860; 24 int *p2=(int *)0x43f854; 25 *p1=10000; 26 *p2=2147483647; 27 28 //改变指针p1,将p1指向numA改为numB 29 int **p3=(int **)0x43f848; 30 *p3=(int *)0x43f854; 31 32 //改变二级指针pp,将pp指向p1改为p2 33 int ***p4=(int ***)0x43f830; 34 *p4=(int **)0x43f83c; 35 36 //改变数组指向 37 char **pp=(char **)0x43f814; 38 *pp=(char *)(0x43f820+0x1); 39 }
[c/c++] programming之路(17)、高级指针
标签:pause lib color str 变量 etc getch include 三级
原文地址:http://www.cnblogs.com/little-monkey/p/7418530.html