码迷,mamicode.com
首页 > 编程语言 > 详细

[c/c++] programming之路(17)、高级指针

时间:2017-08-23 23:10:19      阅读:467      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!