2006年世界杯歌曲_冰岛世界杯排名 - guoyunzhan.com

  • 首页
  • 世界杯黑马
  • 世界杯直播app
  • 世界杯小组赛规则
  • 2025-05-29 04:31:33

    详解C语言中的指针类型

    文章目录

    什么是指针类型定义带 * 类型的变量总结

    指针变量的赋值指针变量宽度指针类型的自加和自减总结

    指针类型的加减运算总结

    指针类型的比较

    什么是指针类型

    在C语言中,指针类型就是数据类型,是给编译器看的,也就是说,指针类型与数组、int、char这种类型是平级的,是同一类的。

    定义带 * 类型的变量

    先看定义的这几个变量:

    double a;

    int b;

    short c;

    char d;

    float e;

    struct p player;

    这都是之前我们用到的类型,它们的含义、内存的分配我们都了解了,这所有的类型,后面都可以跟一个 * ,就像这样:

    double* a;

    int* b;

    short* c;

    char* d;

    float* e;

    struct* p player;

    总结

    任何变量都可以带 * ,加上 * 以后变成新的类型,统称“指针类型”。*可以是任意多个。

    指针变量的赋值

    以前我们赋值都是直接赋值,其实是简写的,它的完整形式是这样:

    int x;

    x = (int)1;

    现在我们要给指针类型的变量赋值,就可以这么写:

    int* x;

    x = (int*)1;

    即使是变量与变量至之间赋值,只要类型相同,也是可以的。

    指针变量宽度

    我们看一下指针变量的宽度是怎么分配的:

    #include

    #include

    #include

    void main()

    {

    char* x;

    short* y;

    int* z;

    x = (char*)1;

    y = (short*)1;

    z = (int*)1;

    system("pause");

    return;

    }

    查看反汇编可以看到,无论你定义的是什么样的指针类型,最终都是4个字节存储: 即使后面有多个 * ,宽度也是4字节。

    指针类型的自加和自减

    我们先看一下基本类型的自加:

    #include

    #include

    #include

    void main()

    {

    char a;

    short b;

    int c;

    a = 1;

    b = 2;

    c = 3;

    a++;

    b++;

    c++;

    printf("%d %d %d \n",a,b,c);

    system("pause");

    return;

    }

    运行结果: 这没什么好说的,太常规了,我们看一下指针类型的自加是怎么样的:

    #include

    #include

    #include

    void main()

    {

    char* a;

    short* b;

    int* c;

    a = (char*)1;

    b = (short*)1;

    c = (int*)1;

    a++;

    b++;

    c++;

    printf("%d %d %d \n",a,b,c);

    system("pause");

    return;

    }

    运行结果:

    发现不同了吧,指针类型的自加或者自减,处理的是去掉*后的字节宽度,char是1个字节,short是2个字节,int是4个字节,所以当a,b,c都为1的时候,自加的结果因为数据类型的不同而不同,变成了2,3,5。

    但是,这里我们用的都是一个 * 的指针类型,如果 * 是多个,会是什么结果呢?

    #include

    #include

    #include

    void main()

    {

    char** a;

    short** b;

    int** c;

    a = (char**)1;

    b = (short**)1;

    c = (int**)1;

    a++;

    b++;

    c++;

    printf("%d %d %d \n",a,b,c);

    system("pause");

    return;

    }

    运行结果: 这时候结果又都相同了,都加了4,这是因为一个指针类型在堆栈中占4个字节,所以只要两个*及以上,最终的自加自减结果都是以4来处理的。

    总结

    不带*的类型自加自减以1来处理。带一个*的指针类型自加自减以去掉 * 后的类型宽度来处理。两个*及以上的指针类型自加自减以4来处理。

    指针类型的加减运算

    其实指针类型的自加与自减我们弄明白了以后,它的加减运算我们就不难理解了,看一下这个例子:

    #include

    #include

    #include

    void main()

    {

    char* a;

    short* b;

    int* c;

    a = (char*)1;

    b = (short*)1;

    c = (int*)1;

    a = a+5;

    b = b+5;

    c = c+5;

    printf("%d %d %d \n",a,b,c);

    system("pause");

    return;

    }

    运行结果: 先不急着总结,在写一个多*的看看什么结果:

    #include

    #include

    #include

    void main()

    {

    char** a;

    short** b;

    int** c;

    a = (char**)1;

    b = (short**)1;

    c = (int**)1;

    a = a+5;

    b = b+5;

    c = c+5;

    printf("%d %d %d \n",a,b,c);

    system("pause");

    return;

    }

    运行一下,发现不同了吧:

    总结

    指针类型可以加减一个整数,但不能乘除。指针类型的变量+n=指针类型的变量+n*(去掉一个n后类型的宽度)。指针类型的变量-n=指针类型的变量-n*(去掉一个n后类型的宽度)。

    指针类型的比较

    指针类型也是可以进行比较的:

    #include

    #include

    #include

    void main()

    {

    char* a;

    char* b;

    a = (char*)200;

    b = (char*)100;

    if(a>b)

    {

    printf("正确!\n");

    }

    else

    {

    printf("错误!\n");

    }

    return;

    }

    运行结果: 看一下反汇编: 这里可以看到,比较用的指令是jbe,这个jbe是无符号数比较,也就是说指针类型在比较的时候是不看符号的,即使这里a等于-200,输出的结果依然是正确:

    Java学习笔记10——静态内部类使用及意义
    Win10电脑怎么设置熄屏时间?Win10更改息屏时间的方法
    世界杯直播app

    友情链接:

    ©Copyright © 2022 2006年世界杯歌曲_冰岛世界杯排名 - guoyunzhan.com All Rights Reserved.