首页 > 其他分享 >P35-P37指针6,7,8

P35-P37指针6,7,8

时间:2023-03-16 15:11:06浏览次数:43  
标签:p2 p3 int char 函数指针 P35 P37 指针

步骤一:                    
                    
char* p1 = "if";                    
char* p2 = "for";                    
char* p3 = "while";                    
char* p4 = "switch";                    
                    
char* keyword[] = {p1,p2,p3,p4};                    
                    
                    
步骤二:                    
                    
char* keyword[] =                     
{                    
    if,                
    for,                
    while,                
    switch                
};                    
                    
                    
步骤三:                    
                    
char* keyword[] =                     
{                    
    if,                
    for,                
    while,                
    switch,                
    NULL                
};                   

最常用的指针数组:

!!!!!!!!!!!!!!!!!!!!!!!!!
结构体指针:
Struct Arg

结构体指针:
Struct Arg        
{        
   int a;        
   int b;        
   int c;        
};    

1、探测结构体指针的特性
(1)++ -- 减去一个*判断 下同理
(2)+整数 -整数

2、通过结构体指针读取、修改:

//创建结构体
Student s;
s.a = 10;
s.b = 20;
s.c = 30;
//声明结构体指针
Student* ps;
//为结构体指针赋值
ps = &s;
//通过指针读取数据
printf("%d\n",ps->a);
//通过指针修改数据
ps->a = 100;
printf("%d\n",ps->a);

!!!!!!!!!!
多级指针:
0xC00000005地址访问错误
*p ==*(p+0)==p[0] *(p+i) = p[i]
只有*类型可以直接在前面加* char short int等类型不行

**p2 *(*(p2+0)+0)==p2[0][0]
*(*(p2+2)+3) p2:char** p2+2 char** 8 /char* 3
***p3 p3:char*** *p3:char** **p3:char*
!!!!!!!!!!!!!!
数组指针:
int (*px)[5];
宽度:4
赋值:px = (int(*)[5])10;
++:+5*4 即20
px 与 *px存储的值一样 为但不同类型的+-对应,宽度不一致

int *p[5] 与 int (*p)[5] 有什么区别?
原因:

[] 的优先级高于* 所以先组合成p[5]数组 再由int *说明 数组存储的类型 == int* p[5];
() 的优先级高于[] 所以*先p先组合成指针 再由int[5]说明数组的宽度

!!!!!!!!!
函数指针:
1、函数指针的声明:
返回类型(*函数名)(参数表)
如:int (*pFun)(int,int);

2、探测:
宽度:4 不能进行++ -- 加减运算

3、函数指针的赋值:
pFun = (int (*)(int,int))10;
或者 pFun = 函数名.

4、函数指针的使用:
与函数使用方式相同

5、另一种常见的表示:
typedef int (*Fun)(int,int);
这个不是变量的声明,而是为函数指针起个别名:Fun 相当于函数指针类型
Fun p;
这个才是变量的声明,p是变量,Fun是类型.

6、隐藏代码到数据区:

代码和数据有什么区别?

unsigned char code[] =         
    {        
            0x55,
            0x8B, 0xEC,
            0x83, 0xEC, 0x40,
            0x53,
            0x56,
            0x57,
            0x8D, 0x7D, 0xC0,
            0xB9, 0x10, 0x00, 0x00, 0x00,
            0xB8, 0xCC, 0xCC, 0xCC, 0xCC,
            0xF3, 0xAB,
            0x8B, 0x45, 0x08,
            0x03, 0x45, 0x0C,
            0x5F,
            0x5E,
            0x5B,
            0x8B, 0xE5,
            0x5D,
            0xC3
    };        
    int main(int argc, char* argv[])        
    {        
        typedef int (*Fun)(int,int);    
            
        Fun p = (int (*)(int,int))&code;    
            
        int x = p(2,2);    
            
        printf("%d\n",x);    
            
        return 0;    
    }        

 

标签:p2,p3,int,char,函数指针,P35,P37,指针
From: https://www.cnblogs.com/cspecialr/p/17222656.html

相关文章

  • P32-P34指针3,4,5
    代码区代码栈 参数,局部变量全局变量 全局变量可读,可写常量区 常量区可读,不可写常量字符串的拷贝:voidFunction(){char*x="china";chary[]="china";*(x+......
  • 智能指针
    智能指针指针注1管理的困境是什么资源释放了但是指针没有为空野指针:野指针是指指向未知内存地址的指针,也就是没有初始化或者已经被释放的指针。使用野指针会导致......
  • 11、指针和引用
    指针:是一个变量,存储一个变量的地址。引用:是变量的别名。1、初始化指针定义时不必初始化,引用必须初始化。指针初始化时可为NULL,引用不能初始化为NULL。inta=1......
  • 2816. 判断子序列(双指针模板题)
    https://www.acwing.com/problem/content/2818/双指针模板题:i指针只有匹配到相等才++,j指针无论如何每次都++那么i==n时,意味着b序列中存在着a序列,且有序离散存放#inclu......
  • 「双指针&前缀和&回溯法」weight
    本题为3月14日23上半学期集训每日一题中B题的题解题面题目描述已知原数列\(a_1,a_2,\cdots,a_n\)中的前1项,前2项,前3项,...,前n项的和,以及后1项,后2项,后3项,...,后n项......
  • 800. 数组元素的目标和(双指针,二分)
    https://www.acwing.com/problem/content/802/二分:枚举a,对于每一个a[i],都二分一下求x-a[i],是否在b数组中#include<iostream>usingnamespacestd;constintN=1......
  • c/c++指针从浅入深介绍——基于数据内存分配的理解(上)
    c/c++指针从浅入深介绍——基于数据内存分配的理解(上)本文是对自我学习的一个总结以及回顾,文章内容主要是针对代码中的数据在内存中的存储情况以及存储中数值的变化来......
  • C语言指针进阶(一)
    前言什么是指针?指针就是一个可以存储地址的变量。当我们将具体的某个对象的地址存放到某个指针变量当中时,我们可以说将某个对象的地址存放到某个指针当中,也可以说指向某个对......
  • 指针的运算
    1、指针关系运算比较两个指针(地址)的大小2、指针加减整数运算根据指针的类型,判断指针加减整数的步长。3、指针-指针的运算指针减去指针得到的是两个指针之间相差的元素个数!指......
  • CH582 CH592 CH573 PC指针打印(排查程序运行+死循环指示)
    代码调试如果需要程序死循环,又不晓得停在哪,可以通过打印PC指针进行定位,具体方法如下比如开启看门狗中断,开发方法参考CH573CH582CH579看门狗使用-debugdabiaoge-博......