初学C语言,指针的困惑

SINODATA_QJF 2012-03-24 09:50:18
在看谭浩强的C程序设计,说道一个函数进行数据交换,应该是这样

swap(int *p1,int *p2)

{
int temp;

temp=*p1;
*p1=*p2;
*p2=temp;

}
还是能读懂

可是下面这代码就很困惑了

swap(int *p1,int *p2)

{
int *temp;

*temp=*p1; /*此语句有问题*/
*p1=*p2;
*p2=temp;
}

困惑的就是:

int *temp;
*temp = *p1; 自己理解的是把p1指针对应的数据赋给tmep指针对应的值,这样应该是没什么问题啊

可是通过VC编译执行时却出错,很是不理解


或者说

int *temp;
然后没给这个temp一个具体的地址指向,然后这时候通过指针操作符“*”即 *temp时会出错?



希望大侠们能够比较具体细致的说下 *temp 这时候是个什么样子的状态,谢谢!



...全文
69 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeemoon 2012-03-24
  • 打赏
  • 举报
回复
int *temp;
声明一个指针,
没有分配内存,
*temp=*p1; //自己理解的是把p1指针对应的数据赋给tmep指针对应的值,

即把p所指内存的值复制到temp所指的内存中,temp没有分配内存,,于是编译器给了一个临时的地址,,,
函数结束时不能收回,
内存泄露了,,,
DNcx831 2012-03-24
  • 打赏
  • 举报
回复
更正下,不是空指针。。是不知道哪里的指针。。(-.-)
DNcx831 2012-03-24
  • 打赏
  • 举报
回复
int *temp; //没有初始化temp
*temp = *p; //*temp这步会出错,取空指针,可以改为 temp = p;
SINODATA_QJF 2012-03-24
  • 打赏
  • 举报
回复
嗯,明白了,谢谢~ 呵呵!
aijianmeng 2012-03-24
  • 打赏
  • 举报
回复
int *temp;
temp指针不知道往哪里指,即没有指向某个内存地址,*p1是指针p1指向地址的数据,*temp=*p1就是把*p1指向的内存地址数据的值赋给temp指向的地址存储,但是temp不知道指向了哪里,编译器不知道把这个值放在内存的什么地方

69,371

社区成员

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

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