指针

作者: Superman168 | 来源:发表于2018-07-06 18:59 被阅读0次

指针

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

以下测试一下:

//指针的宽度
void func(){
    // 编译器决定了指针不能做乘法和除法。
    int *varA;
    varA = (int *)100;
    // 指针自增自减的运算结果,是由指针所指向的数据类型宽度决定的!!!(数据类型:去掉一个 * 看左边)
    varA++;
    printf("%lu 个字节--%d",sizeof(varA),varA);
    
    char*varB;
    varB = (char *)100;
    varB++;
    printf("\n%lu 个字节--%d",sizeof(char),varB);

    char**varC;
    varC = (char**)100;
//    varC++;
    varC = varC + 1;   // + 1 :自增一次
    printf("\n%lu 个字节--%d",sizeof(char),varC);
    
    int * a = 10;
    int * b = 20;
    
    int * c = a - b;
    // int 的话则为 -10,但是 Int * 则需要 除以数据类型的宽度
    //(-10/4)不足一个数据的宽度则进 1(结果为负数不足一个数据的宽度则进 1,正数不进,猜测的,可以测一测);
    printf("\n%d",c);//
    a = 100;
    b = 200;
    printf("\n%d",a - b);

    if (a > b) {
        printf("\na > b");
    }else{
        printf("\na <= b");
    }
}

对应的打印结果如下:

8 个字节--104
1 个字节--101
1 个字节--108
2
-25
a <= b

另外也可以看出,指针在 64 位 CPU 中,占 64个 Bit,即 8 Byte,int 为 4个字节,char 为 1 个字节。

指针反汇编:

void func3 (){
int *a;
int b = 10;
a = &b;
}

指针反汇编

C 语言数组访问

遍历访问:

void func2(){
    // int *arrp = array[0] == array (数组即首元素的地址)
    int array[5] = {1,2,3,4,5};
    int *arrP = array;
    for (int i = 0 ; i < 5; ++i) {
        // 1.
        printf("方法一:%d\n",array[I]);
        // 2.
        printf("方法二:%d\n",*(array+i));// array+i 为地址
        // 3.
        printf("方法三:%d\n\n",*(arrP++));
    }
}

打印结果:

方法一:1
方法二:1
方法三:1

方法一:2
方法二:2
方法三:2

方法一:3
方法二:3
方法三:3

方法一:4
方法二:4
方法三:4

方法一:5
方法二:5
方法三:5

指针的基本用法

  • 一级指针:

void func4 (){
char *p;
char c = *p;
}

x8 为空,即p 未赋值,取值崩溃
  • 二级指针:
 void func4 (){
    // 1.
//    char *p;
//    char c = *p;
    // 2.
    char **p;
    char c = **p;
}
二级指针取值
void func4 (){
    // 1.
//    char *p;
//    char c = *p;
    
    // 2.
//    char **p;
//    char c = **p;

    // 3.
    char **p;
    char c = *(*(p + 2)+2);
}
image.png
  1. 相当于 3 的写法。
void func4 (){
    // 1.
//    char *p;
//    char c = *p;
    
    // 2.
//    char **p;
//    char c = **p;

    // 3.
    char **p;
//    char c = *(*(p + 2)+2);
    // 4.
    char c = p[2][2];
}
同上

相关文章

  • 混淆知识点

    1、指针数组&数组指针、常量指针&指针常量、函数指针&指针函数 数组指针&指针数组 数组指针的定义 int (*p...

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • 指针

    普通指针指针的指针 数组指针 函数指针

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • C:函数指针的坑

    关于该死的函数指针和指针函数 先来个目录 常量指针、指针常量 数组指针、指针数组 函数指针、指针函数 1、先看第一...

  • C 语言指针

    指针类型:指针的读取长度,指针的读取方向(大小端) 空指针,无类型指针,野指针 常量指针,指向常量的指针 http...

  • 二、C语言基础

    A、指针 指针的概念:指针变量 和 指针 的区别 ?答:指针变量是指针的标记,也可以通过指针变量的标记操作指针内存...

  • 王道程序员求职宝典(十一)指针与引用,树

    指针与引用 指针声明typedef别名类型检查void*指针指向指针的指针函数指针typedef简化函数指针定义初...

  • NDK02

    指针 指针概念 1 .指针变量和指针的区别?答: 指针变量是定义指针的标记,指针就是指向的内存地址。2 .函数指针...

  • 12 C指针

    1、指针定义 2、指针进阶 3、指针使用 4、多级指针 4、指针和数组 5、指针和字符串 6、高级指针之和指向函数的指针

网友评论

    本文标题:指针

    本文链接:https://www.haomeiwen.com/subject/snxbuftx.html