На странице 103 в книге Питера Ван Дер Линдена Expert C Programming: Deep C Secrets есть таблица о разнице между массивами и указателями.
Один вопрос, который я не очень понимаю - прямая цитата:
Указатель. Обычно указывает на анонимные данные.
Массив: именованная переменная сама по себе.
Что это значит? Так как вы можете сделать следующее:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int *y = malloc(9*sizeof(int));
printf("sizeof(x) == %zu\n", sizeof(x));
printf("&(x[2]) = %p\n", (void*)&(x[2]));
printf("sizeof(y) == %zu\n", sizeof(y));
printf("&(y[2]) = %p\n", (void*)&(y[2]));
return 0;
}
Вывод:
sizeof(x) == 36
&(x[2]) = 0x7fffffffe5f8
sizeof(y) == 8
&(y[2]) = 0x800e18008
Я не понимаю, почему y
меньше именованной переменной, чем x
.
y
, не являютсяy
(вы можете назначитьy = x;
, аy
будет указывать куда-то еще, но это все равно не будетy
). Данные вx
на самом деле являются неотъемлемой частьюx
;x
и есть эта память, и никакая другая. - person ShadowRanger   schedule 10.02.2019