鱼C论坛

 找回密码
 立即注册
查看: 2405|回复: 2

刚学指针的几个问题

[复制链接]
发表于 2021-5-5 16:35:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大佬可以来解答一下吗?问题写在注释了。萌新真不懂了。
#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[5]={8,5,3,2,4};
    int*p1;//定义
    p1=&ch[4];//取址 与定义分开了 可以这样吗?
    int *p2; //定义
    p2=3;//这里没加*,是把指针当普通整形变量用了吗?
        printf("%d %d",*p1,p2);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-6 02:51:11 From FishC Mobile | 显示全部楼层
加*是指针所指地址存放的数据,不加*是指针地址。'C'是个常量,124也常量,对两个常量求地址,这什么操作?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-6 10:49:58 | 显示全部楼层
本帖最后由 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[4];//这里是取 ch 数组中第5个元素的地址赋值给p1
    int *p2; //定义
    p2=3;//这里是强行让p2的地址等于3(虽然计算机中没有这种地址,但是强行赋值是可以的)
    printf("%d %d",*p1,p2); //我觉得我上面说的很清楚 这里你应该了解了
    //*p1 就是 取 p1 地址中保存的数据,再以十进制输出到屏幕
    //p2 就是直接把地址转换为10进制输出到屏幕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 02:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表