指针

指针

  • 指针自增、自减的结果,其实就是指针指向的数据类型宽度决定的!
  • 指针加上或减去一个整数的结果,其实就是指针指向的数据类型宽度决定的!
  • 指针求差,得到的结果是整形,其结果和指针指向的数据类型宽度有关!
  • 这也就是指针的特点! 它的运算单位 是数据类型的宽度!

指针的宽度

//指针宽度
void funcP(){
    int b;
    int* a;
    printf("a:%lu,b:%lu",sizeof(a),sizeof(b));//a:8,b:4
}

指针的加法(注意对比打印结果)

void funcA(){
    int *a;
    a = (int *) 100;
    a++;
    
    int * b;
    b = (int *) 100;
    b = b + 2;

    printf("a:%d,b:%d",a,b); // 104 108
    printf("a:%p,b:%p",a,b); // a:0x68,b:0x6c  16进制
    
    char* *c;
    c = (char**) 100;
    c++;
    printf("c:%d",c);//108
}

指针的减法

//指针的减法
void funcM(){
    int *a;
    a = (int *) 100;
    a--;
    
    int * b;
    b = (int *) 100;
    b = b - 2;
    
    printf("a:%d,b:%d",a,b); // 104 108
    printf("a:%p,b:%p",a,b); // a:0x68,b:0x6c  16进制
    
    char* *c;
    c = (char**) 100;
    c--;
    printf("c:%d",c);//108 指针的指针8个字节
    
    int x = b - a;
    int y = a - b;
    printf("x:%d,y:%d",x,y);//x:-1,y:1 //加记得乘以宽度  减记得 除以宽度
    
    //比较大小
    if (a > b) {
        printf("a>b"); //
    }else {
          printf("a

注意 指针初始化后必须赋值

//指针赋值
void funcX(){
    
    int b = 100;
    int* a = &b;
    *a = 200;
    
    printf("b:%d,a:%d",b,a);
    
}

汇编代码(指针相关)

代码:

// 指针的汇编
void funAs(){
    int* a;
    int b = 10;
    a = &b;
    
    printf("hi");//调试使用
}

汇编及分析


指针_第1张图片
汇编及分析.png

你可能感兴趣的:(指针)