鱼C论坛

 找回密码
 立即注册
查看: 1310|回复: 15

[已解决]C语言问题,请教一下大神!

[复制链接]
发表于 2019-9-14 20:01:39 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
# include <stdio.h>
# include <malloc.h>
int main(void)
{
        int i=1;
        int j;
        int *p;
        
        p=(int*)malloc(i*sizeof(int));
        printf("输入&p的值");
        scanf("%d",&p);
        j=*p;
        printf("*p的值%d\n",j);
}
这段代码中如果直接输出为
printf("%d",p);的话就可以输出p的值,
*p不是对变量p所指向的内存操作吗?为什么会出错
最佳答案
2019-9-14 21:02:53
本帖最后由 bin554385863 于 2019-9-14 21:08 编辑
# include <stdio.h>
# include <malloc.h>
int main(void)
{
        int i=1;
        int j;
        int *p;
        
        p=(int*)malloc(i*sizeof(int));
        printf("输入&p的值");
        scanf("%d",&p);//删掉&       
        j=*p;
        printf("*p的值%d\n",j);
}

scanf("格式符...", 普通变量地址...)
你这里p本身就已经是地址了,不能在用&运算符了.
运算符&的作用是取变量的地址.
&p就是取指针p的的地址,scanf("%d",&p)你这是在修改一个指针的值而不是修改指针指向地址的值.
另外malloc()一般是和free()配对使用的,以防止内存泄漏.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-14 20:02:39 | 显示全部楼层
@小甲鱼 请求删帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-14 20:03:27 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2019-9-14 20:02
@小甲鱼 请求删帖

为啥删我的贴?给个理由
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 20:03:41 | 显示全部楼层
seglex 发表于 2019-9-14 20:03
为啥删我的贴?给个理由

重复发帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-14 20:04:52 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2019-9-14 20:03
重复发帖

我去那边综合交流区删除那个贴不就可以了,之前发错地方了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 20:05:27 | 显示全部楼层
seglex 发表于 2019-9-14 20:04
我去那边综合交流区删除那个贴不就可以了,之前发错地方了

发错地方不要紧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-14 20:07:44 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2019-9-14 20:05
发错地方不要紧

好多年没来,不知道规矩,你帮我删除综合讨论区的帖子吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 20:08:19 | 显示全部楼层
seglex 发表于 2019-9-14 20:07
好多年没来,不知道规矩,你帮我删除综合讨论区的帖子吧!


我不是那一版的版主,删不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-14 20:08:54 From FishC Mobile | 显示全部楼层
zltzlt 发表于 2019-9-14 20:08
我不是那一版的版主,删不了

我自己可以删除不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 20:09:20 | 显示全部楼层
seglex 发表于 2019-9-14 20:08
我自己可以删除不?

手机版不能删除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 20:41:04 | 显示全部楼层

# include <stdio.h>
# include <malloc.h>
int main(void)
{
        int i=1;
        int j;
        int *p;
        
        p=(int*)malloc(sizeof(int));
        printf("输入&p的值");
        scanf("%d",&*p);
        j=*p;
        printf("*p的值%d\n",j);
                return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-14 20:54:04 From FishC Mobile | 显示全部楼层
yuesezhenmei 发表于 2019-9-14 20:41
# include
# include
int main(void)

&*p和&p区别在哪儿,大神能指点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-14 20:57:38 From FishC Mobile | 显示全部楼层
&p是指向p变量吗而非动态内存吧?&*p是指向动态内存的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 20:58:26 | 显示全部楼层
seglex 发表于 2019-9-14 20:54
&*p和&p区别在哪儿,大神能指点吗?

你在一开始 定义int *p 这时他是指针  但到你用的时候 你只写p的话 他只是地址 ,你要*p他才是指向这个地址的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-14 21:02:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-9-14 21:08 编辑
# include <stdio.h>
# include <malloc.h>
int main(void)
{
        int i=1;
        int j;
        int *p;
        
        p=(int*)malloc(i*sizeof(int));
        printf("输入&p的值");
        scanf("%d",&p);//删掉&       
        j=*p;
        printf("*p的值%d\n",j);
}

scanf("格式符...", 普通变量地址...)
你这里p本身就已经是地址了,不能在用&运算符了.
运算符&的作用是取变量的地址.
&p就是取指针p的的地址,scanf("%d",&p)你这是在修改一个指针的值而不是修改指针指向地址的值.
另外malloc()一般是和free()配对使用的,以防止内存泄漏.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-14 21:05:14 From FishC Mobile | 显示全部楼层
非常感谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 09:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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