操作符 (末) +指针1

目录 

1.整型提升

2.深⼊理解指针(1)

2.1. 内存和地址

1.1 内存

2.2 究竟该如何理解编址

2.3指针变量和地址

2.3.1取地址操作符(&)

​编辑 2.3.2解引⽤操作符


1.整型提升

C语⾔中整型算术运算总是⾄少以缺省(默认)整型类型的精度来进⾏的。 为了获得这个精度,表达式中的字符和短整型操作数在使⽤之前被转换为普通整型,这种转换称为整 型提升。

char a,b,c; ...

a = b + c;

 b和c的值被提升为普通整型,然后再执⾏加法运算。 加法运算完成之后,结果将被截断,然后再存储于a中。

如何进⾏整体提升呢?

1. 有符号整数提升是按照变量的数据类型的符号位来提升的

2. ⽆符号整数提升,⾼位补0

#include <stdio.h> 
int main()
{
	char  a = 10;//char 是有符号的char 
	//00000000000000000000000000001010
	//00001010 -  a
	char  b = 130;
	//00000000000000000000000010000010
	//10000010 -  b
	char c = a + b;
	//10000010这里整形提升按照变量的符号位提升
	//11111111111111111111111110000010提升后的b
	//00000000000000000000000000001010 提升后的a
	//11111111111111111111111110001010  a+b 的补码
	//10000000000000000000000001110101 反码
	//10000000000000000000000001110110  原码
	//因为c是char类型 所以只能存一个字节,
	//  01110110 就是c 的值 因为是负值
	printf("%d ", c); //-116 
	return 0;
}

总结 

即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的 计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别复杂的表达式

2.深⼊理解指针(1)

2.1. 内存和地址

1.1 内存

假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩, 如果想找到你,就得挨个房⼦去找,这样效率很低,但是我们如果根据楼层和楼层的房间的情况,给 每个房间编上号

 其实也是把内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。

 

 内存单元的编号 == 地址 == 指针

2.2 究竟该如何理解编址

 

CPU访问内存中的某个字节空间,必须知道这个 字节空间在内存的什么位置,⽽因为内存中字节 很多,所以需要给内存进⾏编址(就如同宿舍很 多,需要给宿舍编号⼀样)。

但是硬件与硬件之间是互相独⽴的,那么如何通 信呢?答案很简单,⽤"线"连起来。 ⽽CPU和内存之间也是有⼤量的数据交互的,所 以,两者必须也⽤线连起来。 不过,我们今天关⼼⼀组线,叫做地址总线

我们可以简单理解,32位机器有32根地址总线, 每根线只有两态,表⽰0,1【电脉冲有⽆】,那么 ⼀根线,就能表⽰2种含义,2根线就能表⽰4种含 义,依次类推。32根地址线,就能表⽰2^32种含 义,每⼀种含义都代表⼀个地址。 地址信息被下达给内存,在内存上,就可以找到 该地址对应的数据,将数据在通过数据总线传⼊ CPU内寄存器。

2.3指针变量和地址

2.3.1取地址操作符(&)

在C语⾔中创建变量其实就是向内存申请空间,

 %p是用来打印地址的,可以通过上面的调试找到内存来观察, 如果忘记了怎么操做可以看我以前的笔记VS实⽤调试技巧-CSDN博客 链接放这里啦

 

#include <stdio.h>
int main()
{
	int a = 100;
	int*   pa = &a;  //这里的pa是变量, 因为类型是  int * 存放的是地址(指针)
//,所以pa叫指针变量
	//int 表示pa指向的变量a 的类型是int
 	return 0;
}

 

 2.3.2解引⽤操作符

C语⾔中其实也是⼀样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针) 指向的对象,这⾥必须学习⼀个操作符叫解引⽤操作符(*)

#include <stdio.h>
int main()
{
	int a = 0;
	int* pa = &a;
	* pa = 0; //这里的 * 号是解引用操作符	

	return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值