1 内存大小
1K Byte |
0x00-->0X400 0-->210=1024 |
2K Byte |
0x00-->0X800 0-->212=2048 |
4K Byte |
0x00-->0X1000 0-->212=4096 |
1M Byte |
0x00-->0X10 0000 0-->220 |
2M Byte |
0x00-->0X20 0000 0-->221 |
4M Byte |
0x00-->0X40 0000 0-->222 |
1G Byte |
0x00-->0X4000 0000 0-230 |
2G Byte |
0x00-->0X8000 0000 0-->231 |
4G Byte |
0x00-->0X1 0000 0000 0-->232 |
2 地址与内容
char *p_char:内存中每个位置可以存储1个字节,每个位置8位,可以表示无符号0~255,或者有符号-128~127
char *p_int:内存中每个位置可以存储4个字节,每个位置32位,可以表示无符号0~232-1,或者有符号-231~231-1
3 指针变量的定义
方法1:先定义,再赋值
float a=99.5; float *p_a; //定义指针变量 p_a = &a; //指针变量赋值 p_a指向变量a的地址 printf("p_a = %#x ", p_a); printf("a = %f ",a);
输出:
p_a = 0x62fe98
a = 99.500000
方法2:定义的同时赋值
float a=99.5; float *p_a = &a; //定义指针变量指向a的地址
表达式 | 右值 | 类型 |
a | 99.5 | float |
p_a | 0x62fe98 | float * |
*p_a | 99.5 | float |
4 修改指针变量
p_a = &b; //修改指针变量指向变量b的地址
5 修改内存上的数据
int a=15, b=99; int *p=&a; //定义指针p,并让p指向a的地址 *p=b; //通过指针变量修改a的地址上的数据,等于变量b的值 printf("%d,%d,%d",a,b,*p);
输出:
99,99,99
6 指针表达式
char ch[2]={'a','A'}; char *cp=&ch; printf("%#x ",cp); //0x62fe98 printf("%c ",*cp+1); //'b' printf("%c ",*(cp+1)); //'A' #if 0 printf("%c ",*++cp); //'A' printf("%c ",*cp); //'A' #endif #if 0 printf("%c ",*cp++); //'a' printf("%c ",*cp); //'A' #endif #if 0 printf("%c ",++(*cp)); //'b' printf("%c ",*cp); //'b' #endif #if 1 printf("%c ",(*cp)++); //'a' printf("%c ",*cp); //'b' #endif
表达式 | 结果 | 再次打印*cp值 | 说明 |
*cp+1 | 'b' | 先计算*cp='a','a'+1='b' | |
*(cp+1) | 'A' | 取cp下一个地址的值'A' | |
*++cp | 'A' | 'A' | cp先+1,再取cp+1地址的值,即取cp下一个地址的值'A' |
*cp++ | ‘a’ | 'A' | ++先用后加,所以表达式结果就是*p='a',然后执行cp++.在这条指令后面打印*cp的值='A' |
++*cp | 'b' | 'b' | =++(*cp).*p='a','a'+1='b' |
(*cp)++ | 'a' | 'b' | ++先用后加,所以表达式结果就是*p='a',然后执行(*cp)++ = ‘a’++,在这条指令后面打印*cp的值='b' |