【C和指针】学习笔记(三)

指针

一、内存与地址

在要求边界对齐的机器上,整型值存储的起始位置只能是某些特定的字节,通常是2 或4 的倍数

二、间接访问操作符

通过一个指针访问它所指向的地址的过程称为间接访问(indirection)或解引用指针(dereferencing
the pointer) 。这个用千执行间接访问的操作符是单目操作符*

三、指针常量

int* a = 100;
*100 = 25;

看上去像是把25 赋值给a, 因为a 是位置100 所存储的变量。但是,这是错的!这条语句实际上是非法的,因为字面值100 的类型是整型,而间接访问操作只能作用于指针类型表达式。

如果你确实想把25 存储于位置100, 你必须使用强制类型转换。非常不支持

*(int *)100 - 25;

四、指针表达式

char ch ='a';
char *cp = &ch;

表达式 &ch

  • 作为右值,这个表达式的值是变量ch 的地址。
  • 作为左值使用时,是不合法的。当表达式&ch 进行求值时,它的结果应该存储于计算机的某个地方,但你无法知道它位千何处。这个表达式并未标识任何机器内存的特定位置,所以它不是一个合法的左值。

表达式 cp

  • 右值是cp 所处的内存地址中保存的值,即ch的内存地址
  • 左值就是cp 所处的内存地址值。

表达式 *cp

  • 右值是ch所处内存地址中保存的值,即 ’a’;
  • 左值是ch 所处的内存地址值。

cp和

表达式 *cp + 1

  • 右值是cp指向的内存地址中保存的值 + 1,即’b’
  • 左值非法

表达式 *(cp + 1)

  • 右值是cp指向的内存地址 + 1字节 后 的内存地址中保存的值的值。
  • 左值是cp指向的内存地址 + 1字节 后 的内存地址。

表达式 *cp++

++操作符产生cp 的一份拷贝
然后++操作符增加cp 的值
最后,在cp 的拷贝上执行间接访问操作

  • 右值和左值分别是变量ch 的值和ch 的内存位置,也就是cp 原先所指。

表达式 *++cp

  • 间接访问操作符 * 作用于增值后的指针的拷贝上,所以它的右值是ch 后面那个内存地址的值,而它的左值就
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值