指针(算法知识)

1.地址(Adress):
(1)作用:是系统用来进行查找数据位置的依据,标识存储单元
(2)表示:地址是一个整数(通常用十六进制表示)
(3) 编址:按字节:每个字节都有唯一的一个地址
按字编址:存储空间的最小编址单位是字
逻辑地址: 就是你存取东西在电脑内存的相对位置,它是和物理地址 相对的。物理地址是唯一的,逻辑地址的相对的,它包括两部分:段基地址和偏移地址
2.变量地址:
(1)按字节编址:一个变量单元占几个字节就占用几个地址编号
(2)变量地址为变量的第一个字节的地址(首地址)
变量地址:变量地址
变量类型
(3)变量地址的表示:&变量名
&运算符:前缀单目运算符,优先级同! — 前缀++,前缀–
结合性:自右向左
计算:值为变量首字节地址的值(变量有大小,有类 型)
结论:变量地址可完整的表示一个变量的值
程序中的每个变量都有唯一标识的地址
(4)变量单元的分配:从高地址到低地址进行分配
(5)变量地址和变量单元:
通过地址查找单元
地址 ——>单元(单向映射,即地址指向单元)
结论:可以通过地址表示单元:*&变量名

int x=3;
printf("%d,%d",x,*&x);

指针(算法知识)_第1张图片
(6)地址的计算:&变量名+整数 或者 &变量名-整数
结果:地址值
计算过程:&变量名+整数sizeof(变量名)或者 &变量名-整数sizeof(变量名)
地址值可表示一个单元地址值,但必须在表达式中体现该地址对应的单元类型
指针(算法知识)_第2张图片
结论:地址要有类型才可以用来表示单元
3.地址类型:变量类型 *
例:int x=3;
x的类型:int &x的类型:int *
printf("%d\n",
&x); //out:3
printf("%d\n",(12ff7c); 这个是错的:无类型
修改为强制类型转换:printf(“%d”,
(int *)(0x12ff7c)); //out:3
指针(算法知识)_第3张图片
指针(算法知识)_第4张图片

你可能感兴趣的:(指针(算法知识))