C语言指针,的声明、&取地址、*解引用、设置值、偏移、自增 的问题举例

C语言指针,的声明、&取地址、※解引用、设置值、偏移、自增 的问题举例代码:int※a,d[]={1,2,4,8};char*f,e[]=“Hellow…”;a=&b; P1=※a; ※a=4; P1=※(++a);f=&e[7];

(备注:※代表*,转义问题,没显示)
在这里插入图片描述
可以拷贝代码到Keil中调试运行看变量(直接拖动变量到监视器1中观察即可,右键监视器变量,可选择是否显示HEX的0x十六进制和十进制)

#include <stdio.h>
#include <REG52.H>
void main (void) {
//int p1=0;
int* a,b,c;
int d[]={1,2,4,8,16};//注意这里是Shift+[]={}花括号包数组
char e[]="Hellow World!";//1字节的类型,字符串就可以直接双引号
char*f;
while(1)
{
 P1=0;
 P1=0xff;
 P1=0x0f;
 a=&b;
	b=20;
	P1=*a;
a=&c;
	c=10;
	P1=*a;
a=&d;
P1=a;//没有解引用,是指针地址0x0F
P1=*a;//1,解引用了,所以是读指针指向的值1
P1=a[2];//4,0x0F+(2*int2字节)=0x13,P1=*a[2];P1=*(a[2]);//都编译错误	
	P1=a[0];//1,I:0x0F
	P1=a[1];//2,I:0x11
	P1=a[2];//4,I:0x13<
	P1=a[3];//8,I:0x15
	P1=a[4];//16,I:0x17
	
a++;//0x11
P1=*a;//2
P1=*a++;//2
P1=*a;//4
P1=++*a;//5,等效为*a=++*a;P1=*a;//4+1=5,解引用值自增后,给P1赋值
P1=*a;//5
*a=4;//给当前指针赋值4
P1=*(a++);//4,等效为P1=*a;a++;I:0x13+2=0x15后8
P1=*(++a);//16,等效为++a;P1=*a;
P1=*a;//16
P1=*(++a);//2,已经溢出不是固定值了,a指向了0x17+2=0x19
//总结:*解引用优先于自增,加括号()就优先自增,看++指针++前后了

f=&e;//72'H'
P1=*f;//72'H'
P1=f[0];//72'H'
P1=f[1];//101'e'
P1=f[2];//108'l'
P1=f[3];//108'l'
P1=f[4];//111'o'
P1=f[5];//119'w'
P1=f[5];//32' '

P1=*(++f);//101'e'
P1=*(++f);//108'l'
P1=*(++f);//108'l'
P1=*(++f);//111'o'
P1=*(++f);//119'w'

//给字符串截取后半段,偏移[7]"World!"位置
f=&e[7];//87'W'
P1=*f;//87'W'
P1=f[0];//87'W' //[0]下标不再是e[]字符串的首地址了,已经偏移了
P1=f[1];//111'o'
P1=f[2];//114'r'
P1=f[3];//108'l'
P1=f[4];//100'd'
P1=f[5];//33'!'
P1=f[6];//0溢出,不报错
P1=f[7];//0溢出

//指针自增
P1=*(++f);//111'o'
P1=*(++f);//114'r'
P1=*(++f);//108'l'
P1=*(++f);//100'd'
P1=*(++f);//33'!'
P1=*(++f);//0溢出,不报错

f=&e[0];
P1=*f++;//72'H'
P1=*f++;//101'e'
P1=*f++;//108'l'
P1=*f++;//108'l'
P1=*f++;//111'o'

f=&e[0];
P1=*(f++);//72'H'
P1=*(f++);//101'e'
P1=*(f++);//108'l'
P1=*(f++);//108'l'
P1=*(f++);//111'o'
}
2024.7.8 JianPF
}

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
(问AI,给了一个灵动交流式的回答,以前的愿望好像实现了一半了,另一半靠你了)

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值