指针专题1-指针变量

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'
原文地址:https://www.cnblogs.com/Mike2019/p/11805964.html