[c/c++] programming之路(17)、高级指针
一、二级指针
二级指针的作用:
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)、高级指针的更多相关文章
- GO语言的进阶之路-Golang高级数据结构定义
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...
- Scala进阶之路-Scala高级语法之隐式(implicit)详解
Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...
- 《C与指针》——高级指针话题
指针真是让人又爱又恨..... 首先还是先来看一下C语言中的高级指针声明.不要被表面迷惑最重要. /* ** <C和指针>——高级指针话题 */ int i; //定义一个整型变量 int ...
- C++(指针和高级指针)-上篇
[在指针中存储地址] int *pAge=nullptr; //将PAge声明为int指针,即用于存储int变量的地址 如果将指针初始化为0或者NUll,以后必须将变量的地址赋给它,如下例代码: ; ...
- [c/c++] programming之路(19)、数组指针
一.指针运算 #include<stdio.h> #include<stdlib.h> void main0(){ ; int *p=&a; printf());//变 ...
- [c/c++] programming之路(16)、指针
一.调戏百度云管家 #include<stdlib.h> #include<windows.h> _declspec(dllexport) void go(){ ){ Shel ...
- C和指针 第十三章 高级指针话题
高级声明: int (*f)(); 这里声明有两个括号,第二个括号是函数调用,第一个括号是聚组作用.(*f)是一个函数,所以f是指向返回整型的函数的指针.程序中的每个函数都位于,内存中某个位置,所以存 ...
- C语言--- 高级指针2(结构体指针,数组作为函数参数)
一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针 结构体: typedef struct stu{ char name[ ...
- [ASP.NET MVC 小牛之路]17 - 捆绑(Bundle)
本文介绍 MVC 4 提供的一个新特性:捆绑(Bundle),一个在 View 和 Layout 中用于组织优化浏览器请求的 CSS 和 JavaScript 文件的技术. 本文目录 了解VS默认加 ...
随机推荐
- c++试题2
一.写出下列程序的运行结果(40 分) 1.for(i=1;i<5;i++); cout << “OK” << endl; 程序执行后的输出结果是: OK ___ ...
- LCA || BZOJ 1602: [Usaco2008 Oct]牧场行走 || Luogu P2912 [USACO08OCT]牧场散步Pasture Walking
题面:[USACO08OCT]牧场散步Pasture Walking 题解:LCA模版题 代码: #include<cstdio> #include<cstring> #inc ...
- Laravel开发采坑系列问题
2017年12月22日17:40:03 不定时更新 版本5.4.X 一下是可能会遇到的坑 1,必须的写路由转发才能访问控制器,当然你可以自动路由访问,但是需要些匹配规则,其实还是转发了 好多人讨论过自 ...
- css学习_css常见属性用法
1.元素的显示模式 a.被动转换:浮动.绝对定位.固定定位(转换为行内块元素特性的模式---不设置宽度时,模式换行为行内块模式后宽度是内容宽度.) b.主动转换:display:block / in ...
- css学习_css清除浮动
若元素没有设置宽高,那元素实际宽高是被内容撑起来, 若元素自己有设置宽高,那实际面积于自己的盒子模型有关 1.清除浮动的本质 清除浮动主要是为了解决父级元素因为子级浮动而引起的内部高度为0的问题. ( ...
- Feign 重试解析
Spring cloud Feign 在restful 调用失败后,会进行重试.在没有到达指定重试次数,会一直重试. @Override public Object invoke(Object[] a ...
- 树莓派3 之 pi3Robot 控制系统配置
需求 个人正在用Python写一个控制系统,技术选型是python3 + Flask + Mysql + Bootstrap.需要将这套系统直接部署到树莓派中. 代码地址:https://github ...
- React-Router4.x中文文档
以下为翻译的中文API(水平有限,凑合看,欢迎纠正补充~) <BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件 ...
- 《Java程序设计》 第四周学习总结
学号 20175313 <Java程序设计>第四周学习总结 教材学习内容总结 第五章主要内容 了解子类的继承性 子类和父类在同一包中的继承性(除private外其余都继承) 子类和父类不在 ...
- 用stm32f10x建立新的工程重要步骤
stm32f10x系列新建空的工程主要原理: 1.添加启动文件 不同的芯片类型的启动文件的容量是不同的,选择适合该芯片的容量作为启动文件. 注意:启动文件是汇编语言编写的,所以文件的后缀名为.s 2. ...