内存与指针
内存的管理
内存划分一个个的内存单元 编号
内存中将每一个字节看做一个内存单元
内存单元的编号也可以理解为地址
C语言中将地址又称之指针
地址的产生一条地址线来产生传输的
32位机器-32根地址线
232个32位二进制序列(0/1)
232个字节 = 4,294,967,296 Byte
4,194,304 KB
4096 MB
4 GB
内存的使用
变量创建的本质是向内存申请空间
& - 取地址符
&a - 拿出的是a所占内存的4个字节中地址较小的字节的地址
%p 以16进制的形式打印地址(不省略)
%x 以16进制的形式打印地址
int a = 0x11223344;
int * pa = &a; // 指针变量
&a-地址-指针
pa是用来存放地址(指针)的
pa是指针变量
Int 是在申明pa指向的对象的类型
int main() { int a = 10; int* pa = &a; *pa = 20; //解引用操作 *解引用操作符(间接访问操作符) // a = 20 return 0; }
指针的理解
内存单位的编号 = 地址 = 指针
口头语中的指针一般是指针变量
指针变量是用来存放地址(指针)
指针大小的比较
char ch = 'w';
char* pc = &ch;
int a = 10;
int* pa = &a;
printf("%zd", sizeof(*pc));
printf("%zd", sizeof(*pa));
//指针变量是用来存放地址
//32/64位机器上,地址是32/64个(0/1)组成的二进制序列,地址的存放需要4/8个字节 所以指针变量的大小是4/8字节
//与变量的类型无关
输出 4 4
二进制1/0 1-bit 0 - bit
1byte = 8 bit
1KB = 1024byte
……
结构体
内置类型:char short int long long long float double --不能直接表示复杂对象(多个变量)
struct stu
{
char name[20];
int age;
};
struct Book * psb = &b; //结构体指针
Printf(“%s %s %f\n”,(*psb).book_name,……);//结构成员访问操作符 结构体变量.成员名
结构体指针->成员名
psb->book_name,