关于单链表的一个简单问题
#define datatype intint GetElement(Linknode *h,int i,datatype *e)
{
Linelist p;
p = h->next;
int j;
for(j=1;j<i&&p;j++)
p=p->next;
if (!p)
return 0;
*e = p->data;
return 1;
}数据结构与算法P10中讲数据元素的获取,上面是视频中小甲鱼老师的代码
对于这段代码,我的疑问是:没有给e 这个指针赋值,就直接给它所指的地方的内容赋值,这样不就相当于int *a,*a =9 这种类型吗 ,而a并不知道指向哪里,会报错。所以这个地方我不太清楚。求解答!
调用函数的时候不是给了e一个地址吗 本帖最后由 jackz007 于 2019-3-17 13:50 编辑
e 是 int * 的类型,也就是整型数指针,是通过调用 GetElement() 的时候传入的,用指针做参数可以向函数双向传递数据。考察以下代码可以帮助理解:
#include <stdio.h>
void fun(int * e)
{
* e %= 1000 ;
}
main(void)
{
int e = 123456 ;
fun(& e) ;
printf("e = %d\n" , e) ;
}
jackz007 发表于 2019-3-17 12:06
e 是 int * 的类型,也就是整型数指针,是通过调用 GetElement() 的时候传入的,用指针做参数可以向函 ...
那就是说关键看调用的时候的用法咯,如果main函数里面没有给e赋值,而是int *e;fun(e);这样调用就会出错了。 大魔王S 发表于 2019-3-17 17:44
那就是说关键看调用的时候的用法咯,如果main函数里面没有给e赋值,而是int *e;fun(e);这样调用就会出错 ...
不会,只要在主函数中定义了 e,赋不赋值都一样,关键是这个变量必须得先存在。你也可以用我的实例代码测试一下,把 main() 中对 e 的赋值去掉,改由 fun() 赋值,看看是不是可以。
页:
[1]