简单而透彻地理解C语言指针

 

    不少C语言初学者都感觉指针很难理解,其实造成这样的困扰,仅仅是因为指针变量的声明和使用方式与普通的变量(如整型变量)不同而已。

    要透彻理解C语言指针,只要能看懂下面三点即可(结合下面的代码):

#include <stdio.h>

int main(void)
{
    int *int_ptr;
    short *short_ptr;
    char *char_ptr;

    int a = 0x01020304;

    int_ptr = &a;
    short_ptr = (short *)&a;
    char_ptr = (char *)&a;

    printf("*int_ptr = 0x%x, *short_ptr = 0x%x,"
	    "*char_ptr = 0x%x\n", *int_ptr, *short_ptr, *char_ptr);

    return 0;
}


 

    1、  指针变量的声明

    看第5行,在这里星号(*)只是用来告诉编译器要声明一个指针变量int_ptr,同声明数组和函数要使用中括号和小括号的意义一样(千万要注意int_ptr才是指针变量,而不是*int_ptr);这里的关键字int只是用来说明指针变量int_ptr将要匹配的值只能是整型数据的首地址(整型数据一般有四个字节,其中每一个字节对应一个32位的地址值,而指针变量的大小常见的也是4个字节,所以指针变量只能存储整型变量的首地址而已),同理,数组指针和函数指针就是指这个指针将要匹配的值是某种类型数组或函数的首地址而已。

    2、  给指针变量赋值

    很简单,与普通变量的赋值是一样的。如第11行,简单地取整型变量a的首地址赋值给指针变量int_ptr即可。注意,当类型不匹配时,需要进行强制类型转换,如第12和13行,指针变量short_ptr和char_ptr分别能匹配的值是短整型和字符型数据的首地址,所以需要对整形变量a的首地址进行类型转换。

    3、  使用指针变量

    使用指针变量就更简单了,直接在指针变量前使用间接运算符星号(*)即可,使用*int_ptr就是相当于在使用整型变量a。注意,*short_ptr和*char_ptr不能得到整型变量a所有的数值,因为它们只能获知各自所匹配的数据类型长度的数值。

    4、例子简要说明

    指针变量int_ptr、short_ptr和char_ptr的值相同,都是整型变量a四个字节地址当中的低地址。这里还涉及大小端的问题,笔者使用的intel CPU是小端模式,所谓小端模式就是低位字节数据(如0x4)存储在低位字节地址上。

    例子输出结果:

*int_ptr = 0x1020304, *short_ptr = 0x304,*char_ptr = 0x4


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanglinux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值