typedef struct stack{
int size;
int array[30];
}STACK;
int p;
STACK *W;
В чем разница между (*W).array
и (*W).array[0]
?
Как получить указатель на первый элемент в массиве, если у меня есть W
и p
?Указатель на структуры в C
typedef struct stack{
int size;
int array[30];
}STACK;
int p;
STACK *W;
В чем разница между (*W).array
и (*W).array[0]
?
Как получить указатель на первый элемент в массиве, если у меня есть W
и p
?Указатель на структуры в C
В чем разница между (* W) .array и (* W) .array [0]
W->array
является массивом и W->array[0]
является элементом.
Как получить указатель на первый элемент в массиве, если у есть W и p?
Не знаю, что вы хотите сделать с p
но W->array
уже распадается на указатель на первый элемент. Тем не менее, если вы хотите, скажем, пятый элемент:
int *p = &W->array[4];
'int * p = & W-> array [4];' ... как насчет 'int * p = W-> array + 4;'? – LihO
@LihO Конечно, это то же самое :-) – cnicutar
@LihO: Это действительно идентично, хотя некоторые могут считать это менее очевидным (прежние альтернативы говорят буквально: «возьмите адрес вещи в индексе 4»). – delnan
Либо (W->array)
или &(W->array[0])
Там нет нет разницы в адрес массива и адрес первого элемента массива
Адрес * может * быть одним и тем же, но тип (и размер, и, следовательно, шаги, предпринятые во время арифметики указателя - сравните '& (W-> array) + 1' с' & (W-> array [0]) + 1') отличается. Массивы разлагаются на указатели на их первый элемент, но не во всех контекстах - адрес - это одно исключение. – delnan
@ delnan: Не уверен, что я следую за вами. Вы не согласны с тем, что если у меня есть 'pp = & z [0]', то 'pp' теперь указывает на' z [0] '? Также' pp = z' - это одно и то же. Итак, вы говорите, что есть разница с 'pp = z'? Я говорю, что они одинаковые – Cratylus
И' int * pp = &z[0]; 'и' int * pp = z; 'работают и делают' pp' укажите на первый элемент массива (предполагая, что 'z' является массивом int), но' int * pp = & z' (это то, что использует ваш ответ) не будет. – delnan
Вы знаете, что вы можете использовать 'W-> array' вместо этого грубого' (* W) .array'? – ThiefMaster
Да, я знаю. Но можно ли использовать W-> array [0]? – user1089723
@ user1089723 Конечно, вы можете. – cnicutar