为什么要使用双重间接?或者为什么要使用指向指针的指针?
为什么要使用双重间接?或者为什么要使用指向指针的指针?
在C语言中什么时候应该使用双重间接引用?能否通过示例进行解释?
我所知道的是,双重间接引用是指指向指针的指针。为什么我需要一个指向指针的指针呢?
admin 更改状态以发布 2023年5月21日
如果你想要一个字符列表(一个单词),你可以使用char *word
如果你想要一个单词列表(一个句子),你可以使用char **sentence
如果你想要一个句子列表(一个独白),你可以使用char ***monologue
如果你想要一个独白列表(一篇传记),你可以使用char ****biography
如果你想要一个传记列表(一个生物库),你可以使用char *****biolibrary
如果你想要一个生物库列表(一个??lol),你可以使用char ******lol
... ...
是的,我知道这些可能不是最好的数据结构
带有非常非常非常无聊的lol的用法示例
#include#include #include int wordsinsentence(char **x) { int w = 0; while (*x) { w += 1; x++; } return w; } int wordsinmono(char ***x) { int w = 0; while (*x) { w += wordsinsentence(*x); x++; } return w; } int wordsinbio(char ****x) { int w = 0; while (*x) { w += wordsinmono(*x); x++; } return w; } int wordsinlib(char *****x) { int w = 0; while (*x) { w += wordsinbio(*x); x++; } return w; } int wordsinlol(char ******x) { int w = 0; while (*x) { w += wordsinlib(*x); x++; } return w; } int main(void) { char *word; char **sentence; char ***monologue; char ****biography; char *****biolibrary; char ******lol; //fill data structure word = malloc(4 * sizeof *word); // assume it worked strcpy(word, "foo"); sentence = malloc(4 * sizeof *sentence); // assume it worked sentence[0] = word; sentence[1] = word; sentence[2] = word; sentence[3] = NULL; monologue = malloc(4 * sizeof *monologue); // assume it worked monologue[0] = sentence; monologue[1] = sentence; monologue[2] = sentence; monologue[3] = NULL; biography = malloc(4 * sizeof *biography); // assume it worked biography[0] = monologue; biography[1] = monologue; biography[2] = monologue; biography[3] = NULL; biolibrary = malloc(4 * sizeof *biolibrary); // assume it worked biolibrary[0] = biography; biolibrary[1] = biography; biolibrary[2] = biography; biolibrary[3] = NULL; lol = malloc(4 * sizeof *lol); // assume it worked lol[0] = biolibrary; lol[1] = biolibrary; lol[2] = biolibrary; lol[3] = NULL; printf("total words in my lol: %d\n", wordsinlol(lol)); free(lol); free(biolibrary); free(biography); free(monologue); free(sentence); free(word); }
输出:
我的lol中的总单词数:243