Указатель на первый элемент в массиве! (С) - PullRequest
6 голосов
/ 10 июля 2011

Я новичок в C.

Я знаю, что об этом спрашивали во многих формах, но мой немного уникален ... Я думаю.У меня есть короткий знак без знака.

6 unsigned short *pt;  
7 pt = myArray[0];

Массив объявлен так: const unsigned short myArray[1024] и представляет собой массив шестнадцатеричных чисел в форме 0x0000 и т. Д.

Я пытаюсьпри компиляции выдает следующие ошибки:

myLib.c:7: error: data definition has no type or storage class
myLib.c:7: error: type defaults to 'int' in declaration of 'pt'
myLib.c:7: error: conflicting types for 'pt'
myLib.c:6: note: previous declaration of 'pt' was here
myLib.c:7: error: initialization makes integer from pointer without a cast

есть идеи, что происходит не так?

Спасибо, Фил

Ответы [ 4 ]

10 голосов
/ 10 июля 2011

Я предполагаю (вы показываете только две строки), что этот код появляется вне функции. Это утверждение:

pt = myArray[0];

Заявления должны идти в функциях. Кроме того, если myArray имеет тип unsigned short[], то вместо этого вы хотите выполнить одно из следующих действий:

pt = myArray;
pt = &myArray[0]; // same thing
7 голосов
/ 10 июля 2011

& является оператором ссылки. Возвращает адрес памяти переменной, которой предшествует. Хранение указателей адресов памяти . Если вы хотите «сохранить что-то в указателе», вы можете разыменовать это с помощью оператора *. Когда вы это сделаете, компьютер будет искать адрес памяти, содержащийся в вашем указателе, который подходит для хранения вашего значения.

char *pc; // pointer to a type char, in this context * means pointer declaration
char letter = 'a'; // a variable and its value

pc = &letter; // get address of letter
// you MUST be sure your pointer "pc" is valid

*pc = 'B'; // change the value at address contained in "pc"

printf("%c\n", letter); // surprise, "letter" is no longer 'a' but 'B'

Когда вы используете myArray[0], вы получаете не адрес, а значение, поэтому люди использовали &myArray[0].

4 голосов
/ 10 июля 2011

Да, вы действительно должны включить немного больше кода, чтобы мы могли видеть контекст.

Я не совсем получаю сообщения об ошибках, но ваш код неверен.

Попытка:

pt = &myArray[0];

Или:

pt = myArray + 0;

Или просто:

pt = myArray;

Вместо.

0 голосов
/ 10 июля 2011

Вы не должны выбрасывать квалификатор const; поэтому указатель должен иметь модификатор const.

const unsigned short myArray[1024];
const unsigned short * pointer = myArray;  // set pointer to first element
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...