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

关于开辟空间的有关问题

2012-05-12 
关于开辟空间的问题#includestdio.h#includestdlib.htypedef struct Lnode{int datastruct Lnode *ne

关于开辟空间的问题
#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的值不是改变了变了吗?
既然这样那干嘛还要初始化?直接用定义变量开辟空间不就行了,可是这样操作的我下面的程序就会出错,而我见好多书上都有这个初始化。求助。。

[解决办法]

C/C++ code
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;} 

热点排行