9.
指针
9.1
内存
如何管理内存
举例:
内存中将每一个字节看作一个内存单元
每个内存单元都有编号,其编号可认为其地址
c语言中将地址称为指针
可理解为:
编号==地址==指针
地址的产生:
地址是由地址线传输的,即物理上的电线
,电信号转换为数字信号:1/0
如果是32位的机器,就有32根地址线,
数字上排列组合(32位的二进制序列)有pow(2,32)种可能
其能访问的内存空间为pow(2,32)byte,为4G
为了很好的管理和使用内存
1.将内存划分为以字节为单元的内存单元
2.给每个(内存单元)字节一个编号=地址=指针
显示地址:
调试->窗口->内存
在显示时地址以16进制的形式显示
%p:以16进制的形式打印地址(不省略00)
%x:以16进制的形式打印地址(省略)
并且:
&a:拿出a所占4个字节中地址较小的字节的地址即第一个地址//类似,数组的首地址
指针变量pa:
int *pa = &a;
理解1:
pa是用来存放地址的,所以pa被称为指针变量 // 口头语中简称指针变量为指针
理解2:
*说明pa是指针变量
int说明pa指向的对象的类型是int类型
变量创建的本质是向内存申请空间
int a = 10;
为了存放10这个数值,就像内存申请4个字节的空间
*pa;//解引用操作
*解引用操作符/间接访问操作符
通过pa中存储的地址找到pa所指向的对象,即a
*pa就是a
*pa = 20;
就是
a = 20;
9.2
指针变量的大小
其大小与其所指向的变量大小无关
指针变量用来存放地址,所以指针变量的大小就是地址的大小
//32位机器上,地址是32个0/1组成的二进制序列,地址的存放需要4个字节的空间,所以指针变量的大小是4字节
//64位机器上,地址是64个0/1组成的二进制序列,地址的存放需要8个字节的空间,所以指针变量的大小是8字节
10.
%zd专门用于打印sizeof()的返回值
11.
结构体
c语言的内置类型:
char
short
long
...
结构体用于描述复杂对象
语法形式:
struct xx { 类型 变量1; 类型 变量2; 类型 变量3; } int main() { struct xx a1 = {变量1,变量2,变量3} struct xx a2 = {变量1,变量2,变量3} }
在打印时可用
结构成员访问操作符中的:.
语法形式:
结构体变量.成员名
printf(“”, a1.变量1, a1.变量2);
或使用指针和结构成员访问操作符中的->
struct xx *psa = &a
printf(“”,psa->xx_变量1, psa->xx_变量2);
语法形式:
结构体指针->成员名
12.
一个汉字占两个字节的空间