一、二级指针

二级指针的作用:
1.函数改变外部变量指针
2.外挂改变一个指针的值

 #include<stdio.h>
#include<stdlib.h> void main(){
int a = ;
int b = ;
int *p1 = &a;
int *p2 = &b;
int **pp = &p1;
printf("%d,", **pp);
printf("\n%x,%x,%x", p1, *pp,&a);
pp = &p2;
printf("%d,", **pp);
printf("\n%x,%x,%x", p2, *pp, &b);
printf("\n%d,%d", *p2, b); system("pause");
}

 #include<stdio.h>
#include<stdlib.h> void main(){
int a[] = { , , , , , , };
printf("%d", sizeof(a));// 28. C语言规定,数组地址整体大小
printf("\n%d", sizeof(a)/sizeof(int)); int *p = a;
printf("\n%d", sizeof(p));
//a = p + 1; =”: 左操作数必须为左值:a是一个常量,不能作为左值
printf("\n%x,%x", a,p);
//数组名就是一个常量指针,p是变量指针,
//中括号可以根据指针的地址往下找出内容
//数组的本质就是一片连续的内存,数组名就是地址
for (int i = ; i < ; i++)
{
printf("\n%d,%x", p[i], &p[i]);
printf("\n%d,%x", *(p+i),p+i);
//p+i p往前移动i个元素的地址
// *(p+i) p往前移动i个元素
}
printf("\n\n");
for (int *px = a; px < a + ; px++)
{
printf("\npx=%x,*px=%d", px, *px);
} system("pause");
}

二、三级指针

 #include<stdio.h>
#include<stdlib.h> //C程序分配给全局变量内存后,才启动main函数
int a=;
int *p1=&a;
int b=;
int *p2=&b; void change(int **pp){//新建一个二级指针,指向P2;不会改变原来指针指向的地址
pp=&p2;
printf("change pp=%x\n",pp);
} void changeA(int ***ppp){
*ppp=&p2;
} void main(){
int **pp=&p1;
printf("main pp=%x\n",pp);
change(pp);
printf("%d\n",**pp);
changeA(&pp);
printf("%d\n",**pp);
getchar();
}

三、外挂(指针应用)

靶子程序

 #include<stdio.h>
#include<stdlib.h>
#include<Windows.h> void msg(){
MessageBoxA(,"open","阿飞在泡妞",);
} int add(int a,int b){
system("tasklist");
return a + b;
} void main(){
int numA=;
int numB=;
int *p1 = &numA;
int *p2 = &numB;
int **pp=&p1;
char str[] = { 'A', 'B', 'C', 'D', 'E' };
char *pch=str;
//printf("%x,%x\n",msg,add);
printf("%x,%x\n",&numA,&numB);
printf("&p1=%x,&p2=%x,&pp=%x,&pch=%x,str=%x\n",&p1,&p2,&pp,&pch,str);
while ()
{
printf("阿飞的目标是泡%d个妞\n",numA);
printf("阿飞的月薪是%d元\n",numB);
printf("阿飞已经泡了%d个妞\n",*p1);
printf("阿飞希望的RMB%d元\n", **pp);
printf("阿飞在泡妞届的级别%c\n",*pch);
Sleep();
printf("\n");
} system("pause");
}

dll文件

 #include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
_declspec(dllexport) void go(){
while ()
{
void(*p)()=(void(*)())0x11010f5;
p();
Sleep();
}
} _declspec(dllexport) void goA(){
int (*p)(int,int)=(int (*)(int,int))0x1191096;
printf("%d\n",p(,));
system("title 马化腾");
system("color 5E");
} _declspec(dllexport) void goB(){
system("color 5E");
//改变两个变量:numA,numB
int *p1=(int *)0x43f860;
int *p2=(int *)0x43f854;
*p1=;
*p2=; //改变指针p1,将p1指向numA改为numB
int **p3=(int **)0x43f848;
*p3=(int *)0x43f854; //改变二级指针pp,将pp指向p1改为p2
int ***p4=(int ***)0x43f830;
*p4=(int **)0x43f83c; //改变数组指向
char **pp=(char **)0x43f814;
*pp=(char *)(0x43f820+0x1);
}

[c/c++] programming之路(17)、高级指针的更多相关文章

  1. GO语言的进阶之路-Golang高级数据结构定义

    GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...

  2. Scala进阶之路-Scala高级语法之隐式(implicit)详解

    Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...

  3. 《C与指针》——高级指针话题

    指针真是让人又爱又恨..... 首先还是先来看一下C语言中的高级指针声明.不要被表面迷惑最重要. /* ** <C和指针>——高级指针话题 */ int i; //定义一个整型变量 int ...

  4. C++(指针和高级指针)-上篇

    [在指针中存储地址] int *pAge=nullptr; //将PAge声明为int指针,即用于存储int变量的地址 如果将指针初始化为0或者NUll,以后必须将变量的地址赋给它,如下例代码: ; ...

  5. [c/c++] programming之路(19)、数组指针

    一.指针运算 #include<stdio.h> #include<stdlib.h> void main0(){ ; int *p=&a; printf());//变 ...

  6. [c/c++] programming之路(16)、指针

    一.调戏百度云管家 #include<stdlib.h> #include<windows.h> _declspec(dllexport) void go(){ ){ Shel ...

  7. C和指针 第十三章 高级指针话题

    高级声明: int (*f)(); 这里声明有两个括号,第二个括号是函数调用,第一个括号是聚组作用.(*f)是一个函数,所以f是指向返回整型的函数的指针.程序中的每个函数都位于,内存中某个位置,所以存 ...

  8. C语言--- 高级指针2(结构体指针,数组作为函数参数)

    一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针     结构体:     typedef  struct stu{                          char name[ ...

  9. [ASP.NET MVC 小牛之路]17 - 捆绑(Bundle)

    本文介绍 MVC 4 提供的一个新特性:捆绑(Bundle),一个在  View 和 Layout 中用于组织优化浏览器请求的 CSS 和 JavaScript 文件的技术. 本文目录 了解VS默认加 ...

随机推荐

  1. [LeetCode] Majority Element 求大多数

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  2. 10、DOM(文档对象模型)

    1.认识DOM html    骨架 css     装修 javascript 物业 ==DOM 打破上述三者的通道.== [注]script标签一般情况下要写在head标签. <div id ...

  3. html5与css 1. web标准及组成

    学习目标 1.本专业介绍.HTML相关概念,HTML发展历史 2.WEB标准,W3C/WHATWG/ECMA相关概念 3.相关软件的应用以及站点的创建 4.HTML基本结构和HTML语法 5.HTML ...

  4. ArcGIS AddIN异常:无法注册程序集 未能加载文件或程序集"ESRI.ArcGIS.Desktop.Addins"

    异常: 无法注册程序集“D:\CodeXX\bin\Debug\XX.dll”.未能加载文件或程序集“ESRI.ArcGIS.Desktop.AddIns, Version=10.1.0.0, Cul ...

  5. 微信小程序开发笔记01

    微信小程序开发的优势 1,不用安装,即开即用,用完就走.省流量,省安装时间,不占用桌面: 2,体验上虽然没法完全媲美原生APP,但综合考虑还是更优: 3,对于小程序拥有者来说,开发成本更低,他们可以更 ...

  6. gitlab提交代码

    cd existing_foldergit initgit remote add origin http://10.26.1.9/root/yunlian.gitgit add .git commit ...

  7. Gym 101873D - Pants On Fire - [warshall算法求传递闭包]

    题目链接:http://codeforces.com/gym/101873/problem/D 题意: 给出 $n$ 个事实,表述为 "XXX are worse than YYY" ...

  8. POJ 1426 - Find The Multiple - [DP][BFS]

    题目链接:http://poj.org/problem?id=1426 Given a positive integer n, write a program to find out a nonzer ...

  9. Codeforces 570E - Pig and Palindromes - [滚动优化DP]

    题目链接:https://codeforces.com/problemset/problem/570/E 题意: 给出 $n \times m$ 的网格,每一格上有一个小写字母,现在从 $(1,1)$ ...

  10. PTA天梯地图

    本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...