Jika ekspresi type name[count]ditulis dalam beberapa fungsi maka Anda memberi tahu kompiler C untuk mengalokasikan pada sizeof(type)*countbyte frame tumpukan dan menghitung alamat elemen pertama dalam array.
Jika ekspresi type name[count]ditulis di luar semua definisi fungsi dan struct maka Anda memberi tahu kompiler C untuk mengalokasikan pada sizeof(type)*countbyte segmen data dan menghitung alamat elemen pertama dalam array.
namesebenarnya adalah objek konstan yang menyimpan alamat elemen pertama dalam array dan setiap objek yang menyimpan alamat dari beberapa memori disebut pointer, jadi ini adalah alasan Anda memperlakukan namesebagai pointer daripada array. Perhatikan bahwa array dalam C hanya dapat diakses melalui pointer.
Jika countadalah ekspresi konstan yang mengevaluasi ke nol maka Anda memberitahu kompiler C untuk mengalokasikan nol byte baik pada frame stack atau segmen data dan mengembalikan alamat elemen pertama dalam array, tetapi masalah dalam melakukan ini adalah bahwa elemen pertama dari array nol panjang tidak ada dan Anda tidak dapat menghitung alamat dari sesuatu yang tidak ada.
Ini rasional bahwa elemen no. count+1tidak ada dalam countarray -length, jadi ini adalah alasan bahwa kompiler C melarang untuk mendefinisikan array zero-length sebagai variabel di dalam dan di luar fungsi, karena apa isi dari nameitu? Alamat nametoko apa sebenarnya?
Jika padalah pointer maka ekspresi p[n]sama dengan*(p + n)
Di mana tanda bintang * dalam ekspresi kanan adalah operasi dereferensi penunjuk, yang berarti mengakses memori yang ditunjuk oleh p + natau mengakses memori yang alamatnya disimpan p + n, di mana p + npenunjuk ekspresi, ia mengambil alamat pdan menambahkan ke alamat ini nomor, nkalikan dengan ukuran dari jenis pointer p.
Apakah mungkin menambahkan alamat dan nomor?
Ya itu mungkin, karena alamat adalah bilangan bulat unsigned yang biasanya ditampilkan dalam notasi heksadesimal.