| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:函数指针传递问题
只看楼主 加入收藏
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
结帖率:86.67%
收藏
 问题点数:0 回复次数:9 
函数指针传递问题
typedef struct
    
      int last;
    }sqlist;

void changesqlist(sqlist *L)     
{
   L->last=10;
}


如上所示代码,我在主程序调用changesqlist函数,请问通过传递L这个指针,能不能将last改为10???
搜索更多相关主题的帖子: 函数 指针 
2010-03-04 19:26
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:0 
当然能了,因为传递的是地址

顺境逆境切莫止境,得意失意切莫在意。
2010-03-04 19:59
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
可以自己试一下!

★★★★★为人民服务★★★★★
2010-03-04 20:01
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
收藏
得分:0 
恩,因为,最近遇到了类似的提,搞得我云头转向的,呵呵,迷糊了,所以来确认下! 谢谢!
2010-03-04 20:17
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
收藏
得分:0 
还有我问下,如下代码
main()
{ int * p;
  changenum(p);
}
如上定义了指针p,但是没有指向任何空间,直接用作参数在changenum函数中,这样是不是编译通不过的啊?? 为什么??
2010-03-04 20:20
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:0 
不知道你changenum()函数内部定义是不是和上边的changesqlist的函数一样?如果是,编译可以通过,但运行就会出错

顺境逆境切莫止境,得意失意切莫在意。
2010-03-04 21:22
鼻涕流流
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2010-3-4
收藏
得分:0 
回楼主,第一个能否修改的问题,答案是毫无疑问的可以

第二个问题,要看你changenum()函数内部的实现。单是楼主的代码,编译毫无疑问的可以通过,有无警告不知道。
另外,有一个编程通则是这样的,一旦定义指针则应该初始化它,
要么你这么写 int *p = &varable;
要么你这么写 int *p = malloc(sizeof(int));
要么你这么写 int *p = NULL;   //要用到p的时候再赋予地址或分配空间

如果单这么写:int *p;
这样的代码是非常可能出问题的,指针p被定义了但是p的值不确定,
假设某行代码你这样写: var_a = *p + var_b;
而再写上面那行代码之前你没赋予p正确的地址或分配空间的话,
就可能导致一点点问题,嗯,如果这一点点问题是在大的工程中的话,就...
2010-03-04 22:45
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
收藏
得分:0 
#include<stdio.h>
typedef struct
 {
 int last;
 }sqlist;

void changenum(sqlist *L)
{
  L->last=10;
  printf("%d",L->last);
}
main()
{ sqlist * p;
 changenum(p);
   p->last=11;
  printf("%d",p->last);

}




如上程序,我运行了下输出了1011,那请问,这个p不是没有分配空间么,怎么给last赋值了11,还输出了11呢?还有我将p->last=11;删除后也能输出10的!
在changenum函数传递时到底发生了什么事啊?函数到底执行了没?在函数中的L->last=10;执行时就没有出没有问题吗,不是也没有分配空间吗??
到底怎么回事啊,搞不清楚了。。。
2010-03-11 18:48
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:0 
可能TC上可以通过

但 gcc 没通过,
上面的程序并不复合标准c/c++

结构体必须赋内存

程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int last;
}sqlist;

void changenum(sqlist *L)
{
  L->last=10;
  printf("%d",L->last);
}
main()
{
    sqlist * p;
    p = (sqlist *)malloc(sizeof(sqlist));
    changenum(p);
    p->last=11;
    printf("%d",p->last);
    free(p);
}


人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-03-12 08:40
wingfeng
Rank: 2
等 级:论坛游民
帖 子:292
专家分:10
注 册:2008-12-12
收藏
得分:0 
看来好像是软件的编译器的问题,一定是编译器的问题!
2010-03-14 10:17
快速回复:函数指针传递问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028104 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved