c语言定义一个结构体指针变量跟定义该指针变量之后再调用malloc为其分配内存之后有什么不同? 150
例如:structstudent*p1和structstudent*p2;p2=(structstudent*)malloc(sizeof(structstudent))...
例如:
struct student *p1 和 struct student *p2; p2=(struct student *)malloc(sizeof(struct student));
这里的p1和p2只是为了区别两种情况而命名的,原本的问题是因为看到有的关于链表的基本操作代码中给出了在链表中可以定义一个 没有采用malloc分配内存的指针变量p1,去访问链表中的结点,实现p1->next等操作,不太理解一个指针变量用malloc分配了内存和不用malloc的区别所在 展开
struct student *p1 和 struct student *p2; p2=(struct student *)malloc(sizeof(struct student));
这里的p1和p2只是为了区别两种情况而命名的,原本的问题是因为看到有的关于链表的基本操作代码中给出了在链表中可以定义一个 没有采用malloc分配内存的指针变量p1,去访问链表中的结点,实现p1->next等操作,不太理解一个指针变量用malloc分配了内存和不用malloc的区别所在 展开
2个回答
展开全部
你的“分配内存”唯山的概念有点问题——不是用malloc为某个指针分配了内存,而是先用malloc分配了内存,再将这个块内存的首地址赋给一个类型匹配的指针,把首地址赋给一个指针的目芦山拦的是为了操作这一块内存,否则分配在什么地方你就不知道了,就无法操作和释放这一块内存了。根据上述解释,那么再声明另一个类型匹配的指针,通过已有的指针关系就可以访问前面由malloc申请的内存空间了。这就像int *p,a;p=&a;int *q;q=p;,结果p和q就都指向了a,*p是a,*q也是a;(*p)++;能使a增1,(*q)++;同样能使a增1;这有什么不妥?你可以把a比作由malloc分配的内存,并用p=&a把地址赋给了p;而q是与a毫无关系的类型与p一样的指针,只要一句q=p;不就把q与a也联系起来了吗?陪胡供参考。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询