指针
- 指针自增、自减的结果,其实就是指针指向的数据类型宽度决定的!
- 指针加上或减去一个整数的结果,其实就是指针指向的数据类型宽度决定的!
- 指针求差,得到的结果是整形,其结果和指针指向的数据类型宽度有关!
- 这也就是指针的特点! 它的运算单位 是数据类型的宽度!
指针的宽度
//指针宽度
void funcP(){
int b;
int* a;
printf("a:%lu,b:%lu",sizeof(a),sizeof(b));//a:8,b:4
}
指针的加法(注意对比打印结果)
void funcA(){
int *a;
a = (int *) 100;
a++;
int * b;
b = (int *) 100;
b = b + 2;
printf("a:%d,b:%d",a,b); // 104 108
printf("a:%p,b:%p",a,b); // a:0x68,b:0x6c 16进制
char* *c;
c = (char**) 100;
c++;
printf("c:%d",c);//108
}
指针的减法
//指针的减法
void funcM(){
int *a;
a = (int *) 100;
a--;
int * b;
b = (int *) 100;
b = b - 2;
printf("a:%d,b:%d",a,b); // 104 108
printf("a:%p,b:%p",a,b); // a:0x68,b:0x6c 16进制
char* *c;
c = (char**) 100;
c--;
printf("c:%d",c);//108 指针的指针8个字节
int x = b - a;
int y = a - b;
printf("x:%d,y:%d",x,y);//x:-1,y:1 //加记得乘以宽度 减记得 除以宽度
//比较大小
if (a > b) {
printf("a>b"); //
}else {
printf("a<b");
}
}
注意 指针初始化后必须赋值
//指针赋值
void funcX(){
int b = 100;
int* a = &b;
*a = 200;
printf("b:%d,a:%d",b,a);
}
汇编代码(指针相关)
代码:
// 指针的汇编
void funAs(){
int* a;
int b = 10;
a = &b;
printf("hi");//调试使用
}
汇编及分析
: