2013-11-29 2 views

ответ

0

v, &v, &v[0] отличается по типу, но по значению они одинаковы.

  • v имеет тип char[4]; массив из 4 char s
  • &v имеет тип char (*) [4]; указатель на массив из 4 char s
  • &v[0] имеет тип char*; указатель на char
2

v является адрес v[0] и &v это адрес всего массива. К счастью, обе они будут иметь такую ​​же ценность. Но любая арифметика на этих указателях будет иметь доступ по-разному. Например,

(v+1) и (&v + 1) не то же самое.

0

Да Если вы хотите знать базовый адрес массива, то вы можете просто написать V т.е. Это даст

адрес первого элемента в array.and & V даст адрес полного массива.

v[0] такое же как (v+0), v[1] такое же как (v+1) и так далее.

надеюсь, что вы его получите.

1

scanf ожидает аргумент, соответствующий %s иметь тип char *; выражение &v будет иметь тип char (*)[4]. Несмотря на то, что значения будут одинаковыми, типы будут разными и будут иметь значение.

Для этого случая вы хотите назвать это как

scanf("%s", v); 
1

Вы всегда можете обратиться к самому компилятором ...:

#include <stdio.h> 

int main() 
{ 
    char v[4]; 

    printf (" v   &v  &v[0]\n"); 
    printf ("%p %p %p\n", v, &v, &v[0]); 
    printf ("%p %p %p\n", v+1, &v+1, &v[0]+1); 
    return 0; 
} 

Использование MinGW2.95, это печатает следующие:

v   &v  &v[0] 
0240FF24 0240FF24 0240FF24 
0240FF25 0240FF28 0240FF25 

Как вы видите, три выражения дают то же значение для адреса базового массива, поэтому их можно использовать с scanf() (хотя я согласен с тем, что правильное выражение для scanf() является первым). Если вы хотите выполнить некоторые арифметические указатели на них, они не имеют одинакового типа.

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