2016-06-15 2 views
-2

저는 새로운 C 학습자이며 질문이 있습니다. 동시에 다른 struct 포인터에 메모리를 할당 할 수 있습니까? 이와 같이 :동시에 다른 구조체 포인터에 메모리를 할당 할 수 있습니까?

head,next,n1=malloc(sizeof(node)); 

다음과 n1은 struct 유형의 포인터이고 node는 struct 이름입니다. 이것은 메모리에 3 개의 다른 struct 포인터를 생성합니까?

head=next=n1=malloc(sizeof(node)); 

과 동일 : 당신이 무엇을 할 수 없음 당신이 할 수없는

+0

실제로는 명확하게 설명합니다. 세 변수가 모두 같은 메모리 나 다른 메모리를 가리 키기를 원합니 까? 위의 링크는 전자의 경우이를 수행하는 방법을 보여줍니다. – kaylum

+0

다른 메모리 위치 – kalyani

+1

그렇다면 C 구문에서는 대답이 불가능합니다. 상응하는'malloc' 호출로 여러개의 개별 할당이 필요합니다. – kaylum

답변

0

C

에 유효이 표현 문
head,next,n1=malloc(sizeof(node)); 

은 쉼표 연산자의 피연산자 세 개의 하위 표현식으로 구성됩니다. 당신이 malloc의 호출에 의해 반환 된 값으로 할당 된 경우에만 N1 볼 수

당신은 그래서

(head), (next), (n1=malloc(sizeof(node))); 

처럼 상상할 수있다.

이 경우 함수 malloc을 한 번 호출되고 그 값은 다음과 머리, 셋 개 포인터 (N1)에 할당하는 대신

head = next = n1 = malloc(sizeof(node)); 

그러나 다시 쓸 수있다. 3 개의 포인터 모두 같은 값을 가지게된다. 하나의 malloc 호출에 의해 할당 된 메모리의 주소이다.

그래서 각 포인터가 자신의 할당 된 메모리를 가리키고 싶다면 malloc을 세 번 호출해야합니다.

head = malloc(sizeof(node)); 
next = malloc(sizeof(node)); 
n1 = malloc(sizeof(node)); 
3

는 같은 ADRESS 모든 포인터 지점을하지

n1 = malloc(sizeof(node)); 
next = n1; 
head = next; 
0

(C) ","(쉼표) 연산자는 같은 유형의 여러 변수를 정의하는 데 사용됩니다. 예 :

int n1, next, head; 

그러나 변수에 값을 할당하는 데 사용할 수 없습니다. 이렇게하려면 할당 연산자 "="(같음)을 사용해야합니다. 예를 들면 다음과 같습니다.

head = next = n1 = malloc(sizeof(node)); 
관련 문제