关于开辟空间的问题
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*LinkList;
void Init(LinkList L)
{
printf("%d ",L);
L=(LinkList)malloc(sizeof(Lnode));
printf("%d ",L);
L->next=0;
}
void main()
{
Lnode A;
printf("%d ",&A);
Init(&A);
}
附上运行结果:1244992 1244992 2166536,后面的结果每执行一次就会变化一次。
在这个程序中关于开辟存储空间的问题:Lnode A,定义变量A,开辟一个存储空间,而初始化函数中Init()也开辟了一个存储空间,只不过这两个存储空间的位置不一样,但是既然是初始化,那他两个的都开辟了空间,不是重复了吗?
我的理解是:实参&A传递A空间的地址给指针L,但是再初始化的函数里又malloc了一个空间,那么L的值不是改变了变了吗?
既然这样那干嘛还要初始化?直接用定义变量开辟空间不就行了,可是这样操作的我下面的程序就会出错,而我见好多书上都有这个初始化。求助。。
[解决办法]
typedef struct Lnode{ int data; struct Lnode *next;}Lnode,*LinkList;void Init(LinkList L){ printf("inside before addr = %x \n",L); printf("inside before data = %d \n",L->data); L=(LinkList)malloc(sizeof(Lnode)); printf("inside after addr = %x \n",L); printf("inside after data = %d \n",L); L->next=0;}int main(int argc,char** argv){ int i = 0; Lnode A; A.data = 1; printf("outside addr = %x \n",&A); printf("outside data = %d \n",A.data); Init(&A); printf("outside after addr = %x \n",&A); printf("outside after data = %d \n",A.data); scanf("%d",i); return 0;}