2013-09-24 3 views
-1

Как объявить массив без выделения памяти. Обычно мы будем делатьОбъявление массива без выделения памяти

int myArray[10]; 
printf("%p ", &myArray[0]); // this would print the address. 

Но это выделило бы память.

Есть ли способ это сделать?

+0

Можете ли вы предоставить прецедент? Трудно понять, что вы на самом деле имеете в виду/хотите/нуждаетесь ... –

+0

Почему вы хотите это сделать? – Maroun

+0

Адрес чего? Если 'myArray' не выделен, вы не сможете получить его адрес! – nneonneo

ответ

4

Вы можете сделать

extern int myArray[10]; 

в любом одном из header file и определить массив, как этот

int myArray[10]; // you can also initialize here 

у любого из source file.

Поступая (скажем, у вас есть только один файл)

extern int myArray[10]; 
int main(void) 
{ 
    printf("%p ", &myArray[0]); 
    getch(); 
    return 0; 
} 

Linker выбросит ошибку "Unresolved External Symbol". Linker будет искать массив для печати своего адреса, но определение массива не предусмотрено. Таким образом, компоновщик выдает ошибку.

2

явно объявить что-то в глобальном масштабе можно использовать extern:

extern int myArray[10]; 

Однако, вам нужно будет определить его в какой-то (читай: ровно один) модуль компиляции.

0

Это глупый вопрос, каждый раз, когда вы объявляете тип данных. Вы выделяете память этой переменной. Невозможно выделить память и использовать переменную без выделения ей памяти.

+1

Нет, каждый раз, когда вы * определяете * переменную, вы выделяете память. Слово * declare * в C означает просто достаточно подробно описать существование переменной, что код, который ее использует, может быть скомпилирован. – librik

Смежные вопросы