学习C语言之初识指针和结构体

指针

1、指针变量是用来存放地址的,用 * 定义。

地址:计算机中,数据都保存在内存中,像存在一个个小房间一样,地址就是小房间的门牌号,知道了门牌号,我们就可以直接找到对应的数据。

但由于计算机动辄是2的N次方的内存,如果用全二进制数字0/1来表示地址,那会不利于管理。所以发展为以字节为单位,即8个二进制数字0/1为一个小房间。

    int a=10;
    printf("%p\n",&a);   //打印结果是 00 00 00 00 00 61 FE 0C(共8组)。
    //一个字节是8个bit位,即2的8次方(256)个可能数据。
    //16×16=256,8个bit位刚好可以用两位16进制数表示。
    //上面的61、FE、0C就是分别用两位16进制数表示一个字节。
    //64位数据是64个bit位,即2的64次方个可能数据。
    //256^8=(2^8)^8=2^64,64个bit位刚好可以用8位256进制数表示,即8个字节。
    //我的系统是64位,一次可以处理64位数据,这64位数据就可以用8个字节表示。
    //这8个字节代表的数字就是 a 在内存中的地址,指针就是用来存放这个地址的。
    //可以看出,地址就是用少量256进制数字表示大量2进制数字。

而指针就是用来存放房间号的。

有些数据规模比较大,一个小房间住不下,要占用多个小房间,指针只指向第一个房间号,也就是地址的首位字节。

由于指针中存放的是地址,则使用指针的时候,就是使用地址。可以理解为指针就是地址。

    int a=4;
    printf("%p\n",&a);  //打印结果是00 00 00 00 00 61 FE 0C(共8组)。
    int *b =&a;          //定义指针 b ,&是取地址操作符,&a 代表 a 的地址。
    printf("%p\n",b);   //打印结果是00 00 00 00 00 61 FE 0C(共8组)。
    *b =22;             // *b=22 相当于a所在地址赋值22。
    printf("%d\n",a);   //打印结果是 22。

2、指针变量用 数据类型* 定义,这里的数据类型和要存放地址的数据类型相同。

数据类型* //定义指针变量

& //取地址操作符

%p //以地址的形式打印

* //解引用操作符

    int a=2;
    int *b=&a;  //指针的定义格式是 数据类型*,即int*。这里b的int要和a前面相同。
    //如下
    char c='2';
    char *d=&c;     //这里 c 的数据类型是char,他的指针d定义就要用 char* 。

3、指针的大小取决于地址存储需要多大空间,在同一平台上是相同的。

    int a=1;
    int *b=&a;
    printf("%d\n",sizeof(b));       //打印结果是8。
    printf("%d\n",sizeof(int*));    //打印结果是8。
    printf("%d\n",sizeof(char*));   //打印结果是8。
    printf("%d\n",sizeof(float*));  //打印结果是8。
    printf("%d\n",sizeof(short*));  //打印结果是8。

结构体

1、结构体可以让C语言创建新的数据类型,通过struct创建。

2、通过 . 可以选择结构体的变量。

3、结构体定义指针,可通过 *指针 解引用直接表示结构体。

4、结构体变量引用形式:结构体变量.成员变量 名(或结构体指针->成员变量名,此处 -> 等效于 .)

    struct cup      //新的数据类型 struct cup
    {
        char name[40];    //名字
        int  high;      //高度
        char color[20]; //颜色
        float weight;   //重量
    };          //内含四种类型数据的结构体。

    struct cup a={"高脚杯",15,"透明",9.3};
    printf("1:%s %d %s %f\n",a.name,a.high,a.color,a.weight);
    //打印结果 1:高脚杯 15 透明 9.300000。
    //操作符 . 的使用方式是 结构体变量.成员变量 ,可调用内部数据。
    struct cup *b =&a; 
    //结构体创建了新的数据类型 cup,使用指针时要用 struct cup * 。
    printf("2:%s %d %s %f\n",(*b).name,(*b).high,(*b).color,(*b).weight);
    //打印结果 2:高脚杯 15 透明 9.300000
    //结构体可以通过 (*指针).成员变量 调用内部数据。
    printf("3:%s %d %s %f\n",b->name,b->high,b->color,b->weight);
    //打印结果 3:高脚杯 15 透明 9.300000
    //结构体可以通过 指针->变量名 调用内部数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值