1.内存
内存怎么编号的?
一个这样的内存单元是多大?
例子:对于32位数
32为--32跟地址线--物理线--电信号--1/0
电信号转换成数据信息:由1和0组成的二进制序列
00000000000000000000000000000000-32个
01111111111111111111111111111111
...
10000000000000000000000000000000
...
11111111111111111111111111111111
一共有2的32次方个组合
这些组合都可以成为内存单元的编号
这些内存单元的编号可以成为内存单元的地址
一个内存单元的大小为1bit
对于32位
2的32次方bit--(10进制)4 294 967 296bit--(/8)536 870 912Byte--(/1024)524 288Kb--(/1024)512Mb--(/1024)0.5Gb
对于最小单位
char--1byte=8bit--8个地址
最终:一个内存单元是一个字节,然后分配地址的
2指针变量
指针变量--&--指针就是地址
代码1
#include<stdio.h>
int main()
{
int a = 10;//a在内存中要分配空间的--4个字节
printf("%p\n", &a);//%p--打印地址
int*pa = &a;//pa是用来存放地址的,在C语言中叫指针变量
//*说明pa是指针变量
//int说明pa执行的对象是int类型的
char ch = 'w';
char*pc = &ch;
printf("%p\n", &ch);
return 0;
}
结果:
00A6F844
00A6F82F
如何找到a?
#include<stdio.h>
int main()
{
int a = 10;
int* pa = &a;
*pa = 20;//*pa解引操作,*pa,通过pa里边的地址,找到a
printf("%d\n", a);
return 0;
}
结果:20
指针变量的大小
代码2
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(long long*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*));
return 0;
}
对于32位来说
结果:
4
4
4
4
4
4
4
对于64位来说
结果:
8
8
8
8
8
8
8
为什么结果相同?
指针是存放地址的
指针需要多大空间取决于地址的存储需要多大空间
32位--4byte
64位--8byte