精通学习C语言——指针

指针、间接访问和左值

int a;
int *d = &a;

指针变量可以作为左值,并不是因为它们是指针,而是因为它们是变量。对指针变量进行间接访问表示我们应该访问指针所指向的位置。间接访问指定了一个特定的内存位置,这样我们可以把间接访问表达式的结果作为左值使用。

指针、间接访问和变量

*&a = 25;

这个表达式的意思是把值25赋值给变量a,首先&操作符产生变量a的地址,它是一个指针常量,接着,*操作符访问其操作数所表示的地址。在这个表达式中,操作数是a的地址,所以值25就存储于a中。这条语句和 a = 25; 做比较,从功能上说是相同的,但是上述表达式涉及更多的操作,会使所产生的目标代码将会更大、更慢,使源代码可读性变差,因此没有人会使用。

指针常量

*100 = 25;

这条语句实际上是非法的,因为字面值100的类型是整形,而间接访问操作只能作用于指针类型表达式,如果确实想把25储存于位置100,必须使用强制类型转换。

*(int *)100 = 20;

强制类型转换把值100从“整形”转换为“指向整形的指针”,这样对它进行间接访问就是合法的,就相对于把值25存储于a。

指针的指针

int a = 12;
int *b = &a;
int **c = &b;
//分析
表达式          相对于表达式
a              12
b              &a
*b             a, 12
c              &b
*c             b, &a
**c            *b, a, 12

实例

//计算一个字符串的长度
#include <stdlib.h>

size_t
strlen(char *string)
{
    int length = 0;
    //依次访问字符串的内容,计数字符数,直到遇见NUL终止符
    while(*string++ != '\0')
        length += 1;
       
    return length;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值