指针都要初始化吗

niaoburunao 2009-11-20 10:44:41
比如
void swap(int *x,int *y)
{
int a;
a=*x;
*x=*y;
*y=a;
}
这个交换函数里指针不都没初始化嘛
...全文
605 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈思有 2012-02-19
  • 打赏
  • 举报
回复
学习了
zjd358 2009-11-22
  • 打赏
  • 举报
回复
不是看代码的顺序,而是要看执行的顺序,

在使用指针前,指针应该赋值。进入swap函数之后,p总会指向一块内存,如果你没有给swap传值,p所指的内容就是 上次内存使用后的值了。
rejoice914 2009-11-22
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
liem 2009-11-22
  • 打赏
  • 举报
回复
看来LZ需要学习一下函数调用机制。
ylwdi 2009-11-22
  • 打赏
  • 举报
回复
比如
void swap(int *x,int *y)
{
int a;
a=*x;
*x=*y;
*y=a;
}
这个交换函数里指针不都没初始化嘛
int *x,int *y已经初始化了,主函数必须通过实参给int *x,int *y传地址才能调用此交换函数。
stf443091498 2009-11-22
  • 打赏
  • 举报
回复
学习了
konglong_c 2009-11-22
  • 打赏
  • 举报
回复
初始化指针有两个好处。1,避免在程序中 出现null。2,当出错的时候好查找原因。
coolness 2009-11-22
  • 打赏
  • 举报
回复
指针的申明是系统随机给的一个存储地址,此存储地址指向的内容只有读属性。
所以,int *p = 5;是错误的。

而int *p = NULL; 并不代表p是空,而是表示p是未定义的地址空间,不可访问。
2009-11-22
  • 打赏
  • 举报
回复
这帖也能吵起来……
函数调用的过程其中一步就是“参数初始化”……
wangxipu 2009-11-22
  • 打赏
  • 举报
回复
好好看书
你还没理解透彻
HelloDan 2009-11-21
  • 打赏
  • 举报
回复
调用时初始化了。

楼主对指针理解得不好。 最好是初始化,但不逼你初始化。
小坏猪猪 2009-11-21
  • 打赏
  • 举报
回复
lz程序编码也写得太乱了吧
Trust_haitao365 2009-11-21
  • 打赏
  • 举报
回复
swap 函数里的形参通过实参传地址过来了,

结果将两个指针指向的数值交换。

#include <stdio.h>
void swap(int *x,int *y)
{
int a;
a=*x;
*x=*y;
*y=a;
}

void main()
{
int *pn, *pm;
int i = 100;
int j = 33;
pn = &i;
pm = &j;

printf("%d, %d\n", *pn, *pm);
swap(pn, pm);
printf("%d, %d", *pn, *pm);

}

proxukun 2009-11-21
  • 打赏
  • 举报
回复
其实再实际操作中,指针P要么开始时就指向某个地址,或者将其定义为NULL型。如果不定义,因为指针再定义时都指向了一个位置,可能因为指向某些系统文件,造成系统崩溃死机等严重后果。当然。这些都是不太可能遇见的...但是初始化是个良好的习惯.
liuysheng 2009-11-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 niaoburunao 的回复:]
比如
void swap(int *x,int *y)
{
  int a;
  a=*x;
  *x=*y;
  *y=a;
}
这个交换函数里指针不都没初始化嘛
[/Quote]
swap(int *x,int *y)里面的x、y都是形参,是从别处调过来的,这本来就是初始化的过程
fanchangyong 2009-11-21
  • 打赏
  • 举报
回复

void main()
{
int n0=5,n1=6;
swap(&n0,&n1); // 用n0的地址初始化x,n1的地址初始化y
}

你这个是在函数调用的时候,用传进去的实参来初始化.
yueyucanyang 2009-11-21
  • 打赏
  • 举报
回复
这个是函数传进来的参数,怎么能在函数里初始化呢。lz理解错了,应该是在定义指针的时候初始化,现在是在调用的时候,这个参数是从外边传来的,在传进来的时候必须是合理值,初始化后的啊
shadowlsj 2009-11-21
  • 打赏
  • 举报
回复
函数在调用参数时候,使用的其实是其副本值,也就是说你的*x, *y传给函数的是地址,那么函数会再分两个临时的地址副本,所有的操作事实上是针对这两个副本值,函数一系列动作完成后,副本值释放。

*x, *y 在传入的时候应该就已经是赋过值的,在函数内部的时候,副本值也是通过赋值完成,所以,指针在正常使用的时候就应该已经赋过值(初始化);不初始化的是野指针,他本身的地址值是随机的,所指内容也随机,套用书上常见的一句话,后果不可估计。。很危险。
Damn_boy 2009-11-21
  • 打赏
  • 举报
回复
你拿着把尖刀,不给它上个套子,就不怕不小心捅死人?
liangyonglou 2009-11-21
  • 打赏
  • 举报
回复
交换函数里的形参已经通过实参有指向了
加载更多回复(20)

69,373

社区成员

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

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