王道-C语言督学营-6.1 指针的本质(间接访问原理)

一、指针是什么?

        通俗的讲,指针就是地址,我们通常所说的指针其实是指针变量,也就是保持地址的变量。

下面用一段代码展示,更加通俗易懂:

#include<stdio.h>
int main()
{
    int i = 5; //定义整型变量i
    char c = 'a';//定义字符型变量c
    int *i_p = &i;   //定义整形指针变量i_p,并初始化
    char *c_p;   //定义字符型指针变量c_p
    return 0;
}

 

        指针分不同类型,是因为取值可以拿到的空间大小不同

例如: *i_p 可以拿到4个字节大小的空间,而 *c_p只能拿到1个字节大小的空间


二、间接访问

        i_p指针变量中存储的内容是i的地址起始地址),c_p指针变量中存的内容是c的地址,我们可以把指针变量理解为“藏宝图”,通过间接访问可以帮助我们找到“宝藏”(变量)。

#include<stdio.h>
int main()
{
    int i = 5; //定义整型变量i
    char c = 'a';//定义字符型变量c
    int *i_p = &i;   //定义整形指针变量i_p,并初始化
    char *c_p;   //定义字符型指针变量c_p
    c_p = &c;  //变量c的地址赋值给c_p
    *i_p = 10;     //通过“间接访问”修改变量i的值
    printf("i=%d\n",i);    //输出i的值
    return 0;
}

        为什么要做间接访问呢,为什么不直接i=10就好了﹖我们在下一小节中为大家揭晓谜底。


三、指针变量的大小

int i=5; //定义整型变量i

char c ='a'; //定义字符型变量c

int *i_p=&i;

char *c_p=&c;

        指针变量本身大小是固定的,对于64位系统sizeof(i_p)sizeof(c_p)都是8个字节,对于32位系统sizeof(i_p)sizeof(c_p)都算4个字节

        sizeof(*i_p)是4个字节,和sizeof(i)等价,可以理解为 操作 *i_p 就是操作 i 

        sizeof(*c_p)是1个字节,和sizof(c)等价,可以理解为 操作 *c_p 就是操作 c 


四、注意事项

1、指针变量定义方式

        int *a 和int* a 是等价的,为什么大家都用int *a呢?

这是因为类似 int* abc 的语句会使人很自然的认为这条语句把三个变量都声明为整型指针,但是事实并非如此,* 实际上是 *a 的一部分只是对a标识符起作用,其余两个变量只是普通的“整型变量”。

        要声明三个指针变量,正确语句如下:

                int *a,*b,*c;

2、 注意下面写法(毫无意义而且会出错)

float a;

int *p;

p=&a;

3、“ & ”和“ ”两个运算符的优先级别相同,但要按自右向左的方向结合,因此 *&aa 等价,我们不会将 取值 和 取地址 放在一块这么去使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值