C Память указателя языка?

int num = 78;
int *p;

int array[SIZE] = {0,1,2,3,4};
char c[SIZE] = {'A', 'B', 'C', 'D', 'E'};

p = array[3];
*p = (int) *c;
p++;
array[4] = num;
p++;
p = c;
p++;

Я пытаюсь выяснить память за этот код выше. Я понимаю, что указатель p изначально указывает на 3-й элемент массива (который равен 3). Я понятия не имею, что следующая строка *p = (int) *c; средства. Может кто-нибудь объяснить, пожалуйста, эту строку кода?

Изменить: После того, как р увеличивается как таковой, кто-нибудь может объяснить, на что он будет указывать?

3 ответа

*p = (int) *c;

*c означает, что вы берете значение по адресу c

(int) бросает его в int

*p= пишет по адресу p указывает на

Так что, если вы исправите то, что сказал Дроппи, будет числовое значение c[0] в 3-й части array

так было бы 1,2,65,4,5

  1. Вы должны использовать 'p = &array[3];'. Затем указатель будет указывать на третий элемент массива, то есть "C"

  2. *p = (int) *c;

c[size] это массив. c является базовым указателем массива. так *c это значение в базовом указателе, который является 'A', Это заявление поставит 'A' в третьем элементе массива. Таким образом, массив теперь содержит A, B, A, D, E

p = array[3]; // int * = int

is an error; the types don't match, and the compiler will yell at you for it. Тип p является int * и тип array[3] является int,

There are two ways to fix this, depending on what you want to do. Если вы хотите установить p указывать на array[3] (which is what you want to do in this case), you would write

p = &array[3]; // int * = int *

If you want to write the value of array[3] to the object that p points to (which is not what you want to do in this case, since p isn't pointing anywhere valid yet), you would write

*p = array[3]; // int = int

In this case, we want to set p указать на array[3], so we use the first statement. After doing that, the following are true:

 p == &array[3]          // int *
*p ==  array[3] == 2     // int

Now we have the statement

*p = (int) *c;

is saying "take the value of the char возражать, что c points to, convert it to an int value 1, and assign the result to the object that p points to."

За исключением случаев, когда это операнд sizeof или одинарный & operators, or is a string literal being used to initialize an array of char in a declaration, an expression of type "N-element array of T "будет преобразован (" распад ") в выражение типа" указатель на T ", а значением выражения будет адрес первого элемента массива.

Выражение c has type "5-element array of char ". Since it is not the operand of the sizeof или одинарный & operators, it is converted to an expression of type char *, and the value of the expression is the address of the first element in the array, c[0], Таким образом:

 c == &c[0]                         // char *
*c ==  c[0] == 'A' == 65 (ASCII)    // char

Taking all that together, that means

*p = (int) *c;

это еще один способ записи

*p = (int) c[0];

which is another way of writing

array[3] = (int) c[0];

which is another way of writing

array[3] = (int) 'A';

which is another way of writing

array[3] = 65;


  1. (int) is a cast expression; it means that the value following it should be treated as type int,

Другие вопросы по тегам