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


    一、调戏百度云管家

     1 #include<stdlib.h>
     2 #include<windows.h>
     3 
     4 _declspec(dllexport) void go(){
     5     while(1){
     6         ShellExecuteA(0,"open","http://www.baidu.com",0,0,1);
     7         MessageBoxA(0,"因为你的百度网盘存放了大量岛国大片","来自百度的邀请",0);
     8         malloc(1024*1024*10);//1k=1024Byte
     9         Sleep(8000);
    10     }
    11 }

     

     二、指针

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void main0()
     5 {
     6     int a = 1;
     7     int b = 2;
     8     int *p = &a;
     9     printf("*p=%d,a=%d
    ", *p, a); //*p, a  等价
    10     printf("p=%x,&a=%x
    ", p, &a); //p, &a    等价
    11     p = &b;     //指针改变指向
    12     printf("%d
    ", *p);
    13     getchar();
    14 }
    15 
    16 void main()
    17 {
    18     int a = 5;
    19     int b = 8;
    20     int *p = &a; //&a是一个地址,p存放地址,是一个指针变量
    21     int **pp = &p; //**pp 对称int,可以当作int处理
    22     *pp = &b;  //  *pp   int *是指针
    23     *(*pp) = 1;
    24     printf("%d,%d
    ", a,b);
    25 
    26     getchar();
    27 }

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<Windows.h>
     4 char a = 'A';
     5 char b = 'B';
     6 char c = 'C';
     7 char d = 'D';
     8 
     9 void main(){
    10     char *p = &a;
    11     printf("&p=%x,&a=%x,&b=%x,&c=%x,&d=%x", &p, &a, &b, &c, &d);
    12     while (1)
    13     {
    14         printf("我的游戏级别是%c
    ",*p);
    15         _sleep(4000);//跨平台暂停函数
    16         //Sleep(2000);//仅在Windows平台使用
    17     }
    18     
    19     system("pause");
    20 }
    1 _declspec(dllexport) void go(){
    2     int **p=(int**)0x4ff820;
    3     *p=(int*)0x2f8002;
    4 }

    上面的dll文件不要建.cpp文件,建成.c文件,否则dll进行注射时会失败

    指针的类型

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 void main()
     4 {
     5     char *p1;
     6     int *p2;
     7     double *p3;
     8     //所有指针在32位系统下,都是4个字节
     9     printf("%d,%d,%d
    ", sizeof(p1),sizeof(p2), sizeof(p3));
    10     printf("%d,%d,%d
    ", sizeof(*p1),sizeof(*p2), sizeof(*p3));
    11 
    12     getchar();
    13 }

    不改变原值的情况下排序

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 void main()
     4 {
     5     int a,b;
     6     scanf("%d%d",&a,&b);
     7     int *p1=&a,*p2=&b;
     8     printf("a=%d,b=%d
    ", *p1, *p2);
     9     //从小到大
    10     (*p1 > *p2)?printf("%d,%d",*p2,*p1):printf("%d,%d",*p1,*p2);
    11 
    12     system("pause");
    13 }

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 void change(int a){//单向传递,复制,只能接收不能改变原值
     5     a=100;
     6 }
     7 
     8 void changeA(int *p){//双向赋值,新建了一个变量,复制了地址的值,根据地址改变原值
     9     *p=1000;
    10 }
    11 
    12 void main()
    13 {
    14     int a=10;
    15     change(a);
    16     printf("%d
    ",a);
    17     changeA(&a);
    18     printf("%d",a);
    19 
    20     system("pause");
    21 }

    三、玩玩几种小工具

  • 相关阅读:
    当程序员的那些狗日日子
    程序员常犯的几个错误
    我没有帮你的义务,却有拒绝你的权力
    并发 并行 同步 异步 多线程的区别
    cookie的存取
    sqlserver 处理百万级以上的数据处理与优化
    为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname
    详细解析 nginx uri 如何匹配 location 规则
    mysql innodb 从 ibd 文件恢复表数据
    mysql 从 frm 文件恢复 table 表结构的3种方法
  • 原文地址:https://www.cnblogs.com/little-monkey/p/7407327.html
Copyright © 2020-2023  润新知