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 *)所以这也有问题。所以第二个例子也是错的,能运行不代表正确。
[解决办法]