Во-первых, когда вы объявляете int* num
, вы создали указатель. Вы не можете присвоить значение непосредственно указателю. Что вы можете сделать, это объявить переменную, как вы это сделали для int x
, и указать указатель на переменную x
(отсюда указатель имени) с помощью num = &x
(& x относится к адресу x и присваивается num ) Чтобы получить значение num
, вам нужно будет использовать *num
. Ниже приведен пример:
int *num;
int a = 4;
num = &a;
printf("address of a is %p, and value of a is %d", num, *num);
Вывод в первый пример:
address of a is <0xsome address> , and value of a is 4
Что касается символов, то же самое нельзя назначить значению указателю напрямую (как вы это делали в char* word = "johnny";
. Концепция, которую, я думаю, вам следует знать, заключается в том, что "johnny"
- это строка, а строки - это, по сути, массив символов, поэтому каждый символ строки имеет свой собственный адрес. Использование аналогично предыдущему примеру:
char* word;
char someString[6] = "johnny";
word = &someString[0];
printf("address of first char of someString is %p, 1st char of someString is %c, 2nd char of someString is %c", word, *(word), *(word+1));
Выходные данные для второго примера:
адрес первого символа someString равен <0xsome address>, 1-й символ someString равен j, 2-й символ someString равен o
Импорт объекта в обратите внимание, что при доступе к каждому символу строки с использованием разыменования указателей, +n
должен быть внутри скобки с указателем word
.
*word+1 //WRONG
*(word+1) //CORRECT
Надеюсь, это даст вам базовую основу того, что вам нужно для решения остальных вопросов!