一个基础问题

wabcw 2004-03-30 12:31:07
下面这两句有什么区别:

int *p;
int a =10;
p=&a;

int *p = (int *)malloc(2);
*p=10;

我想问的是:第一种没有为指针分配地址,第二种为指针分配地址。
这两种方式的效果是一样的,单有什么区别,讲解越详细越好。
...全文
56 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenxy1 2004-03-30
  • 打赏
  • 举报
回复
int *p; //定义一个指向int的指针,现在p的值是随机的,也就是讲p指向的内存地址不定.
int a =10;
p=&a; //使p指向a.


int *p = (int *)malloc(2); //使这指向一个从heap(堆)分配的地址.
*p=10; //给刚分配的地址赋值
//注意,要delete p,否则会有内存泄露。

pengzhenwanli 2004-03-30
  • 打赏
  • 举报
回复
第一种用法,在实际中不大可能会用到。传递函数参数的时候使用
第二种需要自己管理内存的分配与释放
xrdsheng 2004-03-30
  • 打赏
  • 举报
回复
第一种在栈分配内存,会自动释放,第二种在堆分配内存,需自已释放,
int *p = (int *)malloc(2);
*p=10;
free(p);
bideyore 2004-03-30
  • 打赏
  • 举报
回复
delete p 是CPP的用法吧,与new搭配;
C中是malloc()与free()成对出现;
不对之处请高手指正。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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