2016-06-15 2 views
-2

Я новый ученик C и задаюсь вопросом. Могу ли я назначить память для разных указателей на структуру одновременно? Например:Могу ли я назначить память для разных указателей struct одновременно?

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

Глава next и n1 - указатели типа struct и node - это имя структуры. Будет ли это создавать 3 разных указателя структуры в памяти?

+0

Собственно, только для уточнения. Вы хотите, чтобы все три переменные указывали на одну и ту же память или другую память? Ссылка выше показывает, как это сделать для первого. – kaylum

+0

Различные места памяти – kalyani

+1

Хорошо, тогда ответ невозможен в синтаксисе Си. Требуется несколько отдельных назначений с соответствующим вызовом 'malloc'. – kaylum

ответ

0

Это выражение утверждение, которое действует в C

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

состоит из трех подвыражений, которые являются операндами оператора запятой.

Вы можете представить это как

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

Так как вы можете видеть только n1 присваивается значение, возвращенное зову malloc.

Вы могли бы написать вместо

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

но опять же в этом случае функция таНос вызывается один раз, и его значение присваивается трех указателей n1, затем и голову. То есть все три указателя будут иметь одинаковое значение - адрес выделенной памяти этим одним вызовом malloc.

Итак, если вы хотите, чтобы каждый указатель указывал на свою выделенную память, вы должны вызвать malloc три раза.

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

Нет, вы не можете, то, что вы можете сделать, это сделать все указатели указывает на то же адресу:

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

То же самое, как:

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

in C Оператор «,» (запятая) используется для определения нескольких переменных одного и того же типа. Например:

int n1, next, head; 

Но не может использоваться для назначения значения переменной. Для этого вам нужно использовать оператор присваивания «=» (равный). Например:

head = next = n1 = malloc(sizeof(node)); 
Смежные вопросы