C语言中与结构和指针相关的问题

C语言中与结构和指针相关的问题,c,pointers,struct,C,Pointers,Struct,#包括 #包括 结构节点{ int数据; 结构节点*链接; }; 结构节点*A; int main(){ 结构节点*temp=(结构节点*)malloc(sizeof(节点)); 温度->数据=2; temp->link=NULL; A=temp;//在这一行我有疑问 返回0; }分配指针只是复制地址,而不是指针指向的地址。SoA=温度使A和temp指向同一地址 如果要复制元素,必须取消对指针的引用:*A=*temp首先要做的事是正确的。如何在temp->data=Null中分配Null这里的数

#包括
#包括
结构节点{
int数据;
结构节点*链接;
};
结构节点*A;
int main(){
结构节点*temp=(结构节点*)malloc(sizeof(节点));
温度->数据=2;
temp->link=NULL;
A=temp;//在这一行我有疑问
返回0;

}
分配指针只是复制地址,而不是指针指向的地址。So
A=温度使
A
temp
指向同一地址


如果要复制元素,必须取消对指针的引用:
*A=*temp

首先要做的事是正确的。如何在
temp->data=Null中分配Null这里的数据是
int
类型

你的第一个选择是正确的

您刚刚声明了结构指针变量,但尚未初始化

您的代码有一些错误,我已修复。运行下面的代码,看到A和temp在
A=temp之后有相同的地址语句,表示两者指向同一事物

#include <stdio.h>
#include <stdlib.h>

struct Node{
   int data;
   struct Node* link;
};  // you had forgot ';' here
struct Node* A;
int main(){
   struct Node *temp;
   temp=(struct Node*)malloc(sizeof(struct Node));  
   // this allocates memory and assign its address into temp structure pointer
   temp->data = 2;  
   temp->link = NULL; // here you was doing mistake
   A = temp; // in this line i have doubt
   printf(" Address of pointer A %p", A);
   printf("\n Address of pointer temp is %p",temp);

 return 0;
}
#包括
#包括
结构节点{
int数据;
结构节点*链接;
};  // 你忘了“;”在这里
结构节点*A;
int main(){
结构节点*temp;
temp=(结构节点*)malloc(sizeof(结构节点));
//这将分配内存并将其地址分配到临时结构指针中
温度->数据=2;
temp->link=NULL;//这里你犯了一个错误
A=temp;//在这一行我有疑问
printf(“指针A%p的地址”,A);
printf(“\n指针temp的地址是%p”,temp);
返回0;
}

如果您还有任何疑问,请告诉我。

您从未为
temp
分配过任何内存。而
temp->data=NULL
可能应该是
temp->link=NULL
;无效-您正在分配给尚未分配的内存。您需要声明“Node temp;”以在堆栈上分配它,或者使用new()分配实例。相关:如果为temp或A分配了内存,或者为它们分配了某个变量的地址,那么它们都指向相同的地址。@Barmar是的,但我在问其他问题,请检查描述。我知道这个主题不清楚,但我不能把所有的疑问都放在这个主题上。@Corbell是的,你的意思是我需要先用malloc为它分配内存。是的,这是我犯的错误之一,但我在问其他的问题。请阅读描述以了解我的问题。顺便说一句,谢谢。OP的代码有足够多未定义的行为,忽略它是误导性的。从技术上讲,在C++中,<>代码> *a**TEMP/<代码>不会复制上面代码中的任何内容,因为(a)上面程序的行为已经不指定,(b)没有代码<代码> *a**TEMP不导致未指定的行为。正确的措辞很有挑战性,但除非你这样做,否则我认为这个答案是不正确的,对提问者有害**检查这个**在这里他们使用了一个=temp来复制元素。@uditkumar11因为那是一个结构变量,不是指针。是的,我写了temp->data而不是temp->link。真的很抱歉,请检查代码片段,并询问是否有任何疑问或您的答案对您来说仍然不清楚。我的疑问即将消除。如果我声明一个新的结构,比如(temp1=(struct Node*)malloc(sizeof(struct Node));)现在如果我执行temp1=temp,那么我在temp1中分配temp的地址或者复制elementsInter变量与普通变量不同意味着什么。它们用于指向相同类型的其他变量。这就是为什么必须分配内存,然后将其分配给struct pointer变量的原因。在这里,指针保存着它指向的对象的地址。但是
printf
文本具有误导性。A是一个指针,有一个地址。术语“指针A的地址”应该是
&A