Sebass 发表于 2020-12-22 05:05:39

一个结构体的问题C

我突然发现你传入一个结构体的reference到另一个方程,为什么不能直接给结构体的reference分配内存啊?求详解

#include <stdio.h>

typedef struct l{
int i;
}l;

void it(l* ptr){
ptr = malloc(sizeof(l));
ptr->i = 123456789;
}


int main(void) {
struct l* a;
it(a);
printf("%d",a->i);
return 0;
}


应该output 123456789 吧如果被修改了。但是结果是 1。

hhp_3533 发表于 2020-12-22 07:29:12

{:10_257:},你这代码能运行?真是医学奇迹,你在主函数和it函数分别输出一下地址看看....首先你在主函数里定义的a是个野指针,定义a=null,再把it(a)改成a=it(a);
l *it(l *ptr){
        ptr = (l *)malloc(sizeof(l));
        printf("sizeof(l)=%d,ptr=%d\n",sizeof(l),ptr);
        ptr->i = 123456789;
        return ptr;
}

hhp_3533 发表于 2020-12-22 07:39:51

或者说你把a的地址传过来,而不是把a存的值传过来
void it(l **ptr){
*ptr = (l *)malloc(sizeof(l));
(*ptr)->i = 123456789;
}


int main(void) {
struct l *a=NULL;
it(&a);
printf("%d",a->i);
getch();
return 0;
}

Sebass 发表于 2020-12-22 09:48:18

hhp_3533 发表于 2020-12-22 07:29
,你这代码能运行?真是医学奇迹,你在主函数和it函数分别输出一下地址看看....首先你在主函数里 ...

我懂了,野指针很形象、、、
页: [1]
查看完整版本: 一个结构体的问题C