首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言中函数函数参数传递有关问题

2012-05-09 
c语言中函数函数参数传递问题在c语言中函数传递分为两种,一种是值传递,一种是地址传递,这个我都理解,但是

c语言中函数函数参数传递问题
在c语言中函数传递分为两种,一种是值传递,一种是地址传递,这个我都理解,但是我有以下几点疑惑:
1、关于变量,如果我定义了一个变量,是不是这个变量就分配了一定的存储空间,他的地址是一定的吗?
2、指针变量能做实参吗?他做变量后传递给实参的是什么东西?
我这有两个例子
1,#include<stdio.h>
#include<stdlib.h>
typedef struct{
  int *elem;
  int length;
}Lnode,*LinkList;
void Init(Lnode *L)
{
L->elem=(int*)malloc(10*sizeof(int));//这里我做了一下改变
L->length=0;
}
void main()
{
LinkList A;
Init(A);
}
2、#include<stdio.h>
#include<stdlib.h>
typedef struct{
  int *elem;
  int length;
}Lnode,*LinkList;
void Init(Lnode *L)
{
L=(int*)malloc(10*sizeof(int));//这里我做了一下改变
L->length=0;
}
void main()
{
LinkList *A;
Init(A);
}
上面两个例子中第一个不能运行,会出现终止,第二个可以,我想问为什么?

[解决办法]
1、关于变量,如果我定义了一个变量,是不是这个变量就分配了一定的存储空间,他的地址是一定的吗?
其实就是地址的别名,方便人类记忆和操作,具体是什么地址是编译器操心的事情
2、指针变量能做实参吗?他做变量后传递给实参的是什么东西?
可以啊,就是他指向的值啊


Lnode,*LinkList
void Init(Lnode *L)
LinkList A;
Init(A);

仔细看
[解决办法]
我想问C语言里有传地址的么??
[解决办法]
在第一个例子中你用LinkList A;定义了一个指向结构的指针变量A。但是你没有给A赋值,换句话说A没有指向一个节点,属于野指针。所以后面Init(A);就是错误的引用。

第二个例子中你用LinkList *A; 你用typedef定义新类型后LinkList本身就是一个指向结构的指针。所以A相当于二维指针。你后面调用Init(A);很明显指针类型不匹配。L=(int*)malloc(10*sizeof(int));这句话L是Lnode *但是你在malloc前面加的是(int *)所以这也有问题。所以第二个例子也是错的,能运行不代表正确。
[解决办法]

探讨

我想问C语言里有传地址的么??

[解决办法]
void Init(LinkList &L)
C里面传参数没这种写法的,C++的引用。
[解决办法]
其实函数实参传的都是值,
只不过当这个值是地址时 就可以通过这个地址访问到变量所存储的空间 
从而改变变量的值 
掌握这一点 指针 形参实参 引用
都好理解了
[解决办法]
探讨

其实函数实参传的都是值,
只不过当这个值是地址时 就可以通过这个地址访问到变量所存储的空间
从而改变变量的值
掌握这一点 指针 形参实参 引用
都好理解了

热点排行
Bad Request.