user-0 提问: 一个关于指针关的问题

回复:
user: user-0
content: 引用 10 楼 a345485527 的回复:[quote=引用 9 楼 u013160932 的回复:] [quote=引用 8 楼 u013160932 的回复:] [quote=引用 7 楼 a345485527 的回复:] 举个简单的例子  typedef struct { 	int val; }A,*pA;  int main() { 	//下3行正常运行， 	A a; 	a.val=123; 	printf("%d\n",a.val);  	pA ptr;//定义指针 	ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看 	ptr->val=123; 	printf("%d\n",ptr->val); 	free(ptr); }  嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =[/quote] 哦哦,我知道哪错了= =[/quote] 加油吧，跨年还能静下心来编程，可赞[/quote] 谢谢大神的帮忙和鼓励

user: user-1
content: 引用 9 楼 u013160932 的回复:[quote=引用 8 楼 u013160932 的回复:] [quote=引用 7 楼 a345485527 的回复:] 举个简单的例子  typedef struct { 	int val; }A,*pA;  int main() { 	//下3行正常运行， 	A a; 	a.val=123; 	printf("%d\n",a.val);  	pA ptr;//定义指针 	ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看 	ptr->val=123; 	printf("%d\n",ptr->val); 	free(ptr); }  嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =[/quote] 哦哦,我知道哪错了= =[/quote] 加油吧，跨年还能静下心来编程，可赞

user: user-0
content: 引用 8 楼 u013160932 的回复:[quote=引用 7 楼 a345485527 的回复:] 举个简单的例子  typedef struct { 	int val; }A,*pA;  int main() { 	//下3行正常运行， 	A a; 	a.val=123; 	printf("%d\n",a.val);  	pA ptr;//定义指针 	ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看 	ptr->val=123; 	printf("%d\n",ptr->val); 	free(ptr); }  嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =[/quote] 哦哦,我知道哪错了= =

user: user-0
content: 引用 7 楼 a345485527 的回复:举个简单的例子  typedef struct { 	int val; }A,*pA;  int main() { 	//下3行正常运行， 	A a; 	a.val=123; 	printf("%d\n",a.val);  	pA ptr;//定义指针 	ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看 	ptr->val=123; 	printf("%d\n",ptr->val); 	free(ptr); }  嗯,果然分配真的不行,我就不明白了,我那个程序怎么没分配空间也不会出错= =

user: user-1
content: 举个简单的例子  typedef struct { 	int val; }A,*pA;  int main() { 	//下3行正常运行， 	A a; 	a.val=123; 	printf("%d\n",a.val);  	pA ptr;//定义指针 	ptr=(pA)malloc(sizeof(A));//把这句和free(ptr)注释掉再看看 	ptr->val=123; 	printf("%d\n",ptr->val); 	free(ptr); }

user: user-0
content: 引用 5 楼 user-2 的回复:void CreatStack(Linkstack s) 这时把s复制一个 stack s; CreatStack(&s);  不报错并不等于正确，你上面代码应该是什么也没做。你也没给CreatStack的源代码 我在回复给了代码了,我改成这样后,遍历,插入,都可以啊= =

user: user-2
content: void CreatStack(Linkstack s) 这时把s复制一个 stack s; CreatStack(&s);  不报错并不等于正确，你上面代码应该是什么也没做。你也没给CreatStack的源代码

user: user-0
content: 引用 3 楼 a345485527 的回复:记住，使用指针之前必须要初始化或者为它分配内存， 在主函数中定义的s是一个指针，而在Init函数中，你只为s->top（也就是QNODE）分配了内存，而没有为s自身分配内存 下面是改正过的：  void Init(stack &s)//初始化 { 	s=(stack)malloc(sizeof(STACK));//给s分配内存 	s->top=(Qnode)malloc(sizeof(NODE));//然后再给s->top分配内存 	s->bot=s->top; 	s->top->next=NULL; }  可是当我换成 void CreatStack(Linkstack s) stack s; CreatStack(&s); 这种形式的时候,函数里面也没分配啊,但是程序运行的到= =  还有,当我用stack定义s的时候不是系统就已经分配好内存了么?

user: user-1
content: 记住，使用指针之前必须要初始化或者为它分配内存， 在主函数中定义的s是一个指针，而在Init函数中，你只为s->top（也就是QNODE）分配了内存，而没有为s自身分配内存 下面是改正过的：  void Init(stack &s)//初始化 { 	s=(stack)malloc(sizeof(STACK));//给s分配内存 	s->top=(Qnode)malloc(sizeof(NODE));//然后再给s->top分配内存 	s->bot=s->top; 	s->top->next=NULL; }

user: user-0
content: 引用 1 楼 a345485527 的回复:1.BTree &T叫做引用，可以理解成把实参直接传递到函数中了，没有拷贝副本 2.没看出什么问题，CreateStack内部的问题吧 那你帮我看看 #include<stdio.h> #include<stdlib.h> typedef struct NODE { 	int data; 	struct NODE *next; }QNODE,*Qnode; typedef struct { 	Qnode top; 	Qnode bot; }STACK,*stack;  void Init(stack &s)//初始化 { 	s->top=(Qnode)malloc(sizeof(NODE)); 	s->bot=s->top; 	s->top->next=NULL; } void push(stack s,int e)//入栈 { 	Qnode p=(Qnode)malloc(sizeof(NODE)); 	p->data=e; 	p->next=s->top; 	s->top=p; } void traverse(stack s)//遍历 {     Qnode p=s->top; 	while(p!=s->bot) 	{ 		printf("%d ",p->data); 		p=p->next; 	} } void pop(stack s)//出栈 { 	Qnode p=(Qnode)malloc(sizeof(NODE)); 	p=s->top; 	s->top=p->next; 	free(p); 	p->next=NULL; } int main() { 	stack s; 	Init(s); }

user: user-1
content: 1.BTree &T叫做引用，可以理解成把实参直接传递到函数中了，没有拷贝副本 2.没看出什么问题，CreateStack内部的问题吧