Sizin ikinci örnektir
bu
bir kullanım, diğerleri bir işaretçi işaretçi, yukarıda değinildiği gibi, ve basitçe tahsis edilebilir olduğu Yanlış, her bellek konumu kavramsal olarak
char*
'u değil, bir
char
'u tutmaz. Eğer biraz düşüncen hiç değişmiyor ise, bu yardımcı olabilir:
nedenle
char *x; // Memory locations pointed to by x contain 'char'
char **y; // Memory locations pointed to by y contain 'char*'
x = (char*)malloc(sizeof(char) * 100); // 100 'char'
y = (char**)malloc(sizeof(char*) * 100); // 100 'char*'
// below is incorrect:
y = (char**)malloc(sizeof(char) * 50 * 50);
// 2500 'char' not 50 'char*' pointing to 50 'char'
Eğer C karakter diziler/işaretçiler bir dizi nasıl, ilk döngü olacaktır. Bir dizi karakter dizisi için sabit bir bellek bloğu kullanmak tamam, ancak char**
yerine bir char*
kullanırsınız, çünkü belleğinizde herhangi bir işaretçiniz yoksa sadece char
s.
char *x = calloc(50 * 50, sizeof(char));
for (ii = 0; ii < 50; ++ii) {
// Note that each string is just an OFFSET into the memory block
// You must be sensitive to this when using these 'strings'
char *str = &x[ii * 50];
}
Buna "çift işaretçi" diyemezsiniz - bu yanlış zihninizi zihinsel olarak kapatır - işaretçinin işaretçisidir. –