Apa perbedaan antara "char * A []" dan "char ** A" dalam bahasa C?


Jawaban 1:

char * a [] adalah array pointer untuk variabel tipe char sedangkan char ** a mendefinisikan pointer ke variabel pointer variabel tipe char.

untuk misalnya

char c = 'a'; // nilai c = 2

char * p = & c;

// pointer p poin ke variabel c

char ** pp = & p;

// pp menunjuk ke pointer p yang menunjuk ke variabel c

Untuk info lebih lanjut, lihat URL: http: //www.thegeekstuff.com/2012 ...


Jawaban 2:

char * A [] adalah array, dan char ** A adalah sebuah pointer. Dalam C, array dan pointer sering dipertukarkan, tetapi ada beberapa perbedaan:

1. dengan "char * A []", Anda tidak dapat menetapkan nilai apa pun untuk A, tetapi A [x] saja;

dengan "char ** A", Anda dapat menetapkan nilai ke A, dan A [x] juga.

2. dengan "char * A []", Anda dapat menginisialisasi array (mis. Char * A [] = {"foo", "bar"};) dan gunakan sizeof (A) untuk mendapatkan ukuran (pada 64-bit) mesin, contoh di atas memberi Anda 16 karena ini adalah array dari dua karakter *);

dengan "char ** A", sizeof (A) selalu mengembalikan ukuran pointer (pada mesin 64-bit, 8).


Jawaban 3:
  1. char * A [] berarti "array pointer ke karakter," sedangkan char ** A berarti "pointer ke pointer ke char." Perhatikan bahwa yang pertama secara eksplisit memberi tahu Anda bahwa kami sedang bekerja dengan sebuah array, sedangkan yang kedua tidak membuat jaminan seperti itu. Namun, dengan konstruksi, keduanya setara dengan C karena array disimpan sebagai pointer ke elemen pertama dalam array itu. Sebuah array pointer adalah contoh khusus dari pointer ke pointer; pointer ke pointer tidak harus berupa array pointer. Untuk mendemonstrasikan ini, perhatikan bahwa, untuk array array pointer, Anda dapat menetapkan char ** A = (char **) (void *) arrp, tetapi Anda tidak bisa (mis. Ia melempar kesalahan kompiler) char * A [] = ( char * []) ​​(void * []) ​​arrp; - pada kenyataannya, Anda tidak dapat instantiate dan array tanpa memberikan argumen panjang, dan Anda tidak dapat melakukan cast ke array, hanya pointer

Jawaban 4:

Pertama adalah pointer [1] ke elemen pertama (alias array), yang kedua dapat menjadi tipe pointer ke array string karakter [2], misalnya.

Dengan kata lain array tetap menjadi pointer dan karenanya hanya gula sintaksis (selama Anda mengabaikan permintaan alokasi ukuran jika terjadi array)

[1] Tidak seperti int *, char * adalah tipe penunjuk universal.

[1] string dilewatkan sebagai null array yang dihentikan, sendiri.

Untuk lebih banyak contoh, lihat

Jawaban Ken Gregg untuk Kapan saya harus mendefinisikan pointer ganda dalam arg- di program utama C sebagai argumen?

Jawaban Sergey Zubkov untuk Apakah array array mungkin dalam C?

Jawaban John L. Miller untuk Apakah array array mungkin dalam C?