新手请教关于指针的问题

petercheng456 2005-03-26 12:18:36
一个程序:

#include "stdio.h"

void f(int *p)
{
*p = 10;
}

void main()
{
int *p;
f(p);
printf("%d", (*p)++);
}

书上说输出的结果是随机值,我觉得:int *p没有给指针初始化,但是p毕竟还是指向了一个存储单元吧,那么*p自然就是被赋了10,然后+1,结果应当是11啊,为什么是随机值呢?
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
llf_hust 2005-03-26
  • 打赏
  • 举报
回复
这里应该是输出一个随机值,因为p没有分配空间,他指向哪块内存地址都不知道。用f(p)后p 是值是不能够带回的,因为没有用指针的指针
petercheng456 2005-03-26
  • 打赏
  • 举报
回复
不好意思,一共10分不大好分,大家见谅。。。
petercheng456 2005-03-26
  • 打赏
  • 举报
回复
谢谢大家^_^
ly102091002 2005-03-26
  • 打赏
  • 举报
回复
这是因为指针是没有存储空间的!当你给*p赋值时,这个值没有空间,所以运行时会报错!应该修改成这样:
#include <stdio.h>
#include <stdlib.h>
#include "stdio.h"

void f(int *p)
{
*p = 10;
}

void main()
{
int *p;
p = (int *) malloc(sizeof(int));
f(p);
printf("%d", (*p)++);
}
这样就OK啦!
unc 2005-03-26
  • 打赏
  • 举报
回复
也就是问题错在第一步。
unc 2005-03-26
  • 打赏
  • 举报
回复
因为*p并没有指向任何存储单元,所以你的一切赋值都是无意义的。
petercheng456 2005-03-26
  • 打赏
  • 举报
回复
我还是想不通,我是这么想的,帮忙看看哪步错了:
1、声明了一个整型指针p,因为没有初始化,所以指向一个随机的地址,比如说是FFF2H
2、调用f函数,因为是传值,所以p的值(FFF2H)被拷贝给形参p
3、*p = 10把p指向的单元(FFF2H)的内容赋为10
4、printf中顺理成章打出11来
哪步想错了呢?谢谢大家!
yangkun110 2005-03-26
  • 打赏
  • 举报
回复
调用的函数没有返回值, 主函数定义的P(地址)是任意的,所以在输出的(*p)++ 里面的P(地址)也是任意的.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧