刚学指针的几个问题
各位大佬可以来解答一下吗?问题写在注释了。萌新真不懂了。#include<stdio.h>
int main ()
{
char a='F';
int f=123;
char *pa = &a;
int *pb =&f;
printf("%c %d\n",*pa,*pb);// 加*,打印所存值
*pa='C';//这里为什么要加*???
*pb+=1;//还有这里
printf("%c %d\n",*pa,*pb);//加*,打印所存值
printf("%p\n%p\n",pa,pb);//不加*,打印地址
printf("%p\n%p\n",'C',124);//为什么和上面打印的地址不一样 ? ??
return 0;
/*这是运行结果:
F 123
C 124
000000000062FE0F
000000000062FE08
0000000000000043
000000000000007C
*/
}
还有这个
#include<stdio.h>
int main ()
{
int ch={8,5,3,2,4};
int*p1;//定义
p1=&ch;//取址 与定义分开了 可以这样吗?
int *p2; //定义
p2=3;//这里没加*,是把指针当普通整形变量用了吗?
printf("%d %d",*p1,p2);
return 0;
} 加*是指针所指地址存放的数据,不加*是指针地址。'C'是个常量,124也常量,对两个常量求地址,这什么操作? 本帖最后由 yuxijian2020 于 2021-5-6 10:52 编辑
你要了解指针的本质,指针的本质就是16进制的数字
32位系统下 指针占8个字节;64位系统下,指针占16个字节
只不过,这个数字代表了内存中的地址
然后再看你的问题
printf("%c %d\n",*pa,*pb);//这里就是取 pa 和 pb 的地址中保存的数据,再以 %c 和 %d 的形式输出到屏幕
// %c 就是 获得一个字节的数据,按ANSI码转换成字符输出到屏幕
// %d 就是 获得 int 大小的数据,转换为10进制,输出到屏幕
printf("%p\n%p\n",pa,pb);//这里就是直接打印16进制的地址
printf("%p\n%p\n",'C',124);//这里是把'C' 按ANSI码转换为16进制数字输出
//124 这个数字也是一样,转换为16进制输出到屏幕
然后再看下面的
p1=&ch;//这里是取 ch 数组中第5个元素的地址赋值给p1
int *p2; //定义
p2=3;//这里是强行让p2的地址等于3(虽然计算机中没有这种地址,但是强行赋值是可以的)
printf("%d %d",*p1,p2); //我觉得我上面说的很清楚 这里你应该了解了
//*p1 就是 取 p1 地址中保存的数据,再以十进制输出到屏幕
//p2 就是直接把地址转换为10进制输出到屏幕
页:
[1]