指针所需的基本帮助(双重间接)
我前段时间问过一个帐户,我不记得如何操纵基本指针,有人给了我一个非常好的演示
例如 char *ptr = "hello" (hello = a char array) 所以现在* ptr指向h ptr =移动ptr指向下一个元素,得到它的值我做* ptr,这给了我e 好吧到目前为止我希望:D但现在我需要操纵一个char ** ptr并且想知道我是如何以一种模仿二维数组效果的方式做到这一点的? 一些基本技巧将非常受欢迎,因为我需要做一个有** ptr来模仿二维阵列的作业而不知道它是如何做到这首先意味着我甚至无法在纸上解决它(例如,你如何取消引用一个** ptr,你如何获得[x] [y]值等) 谢谢 解决方法
如果所有地址都已正确设置,您可以使用与下标数组相同的方式下标指针.
假设以下声明: char **ptr; 以下是各种表达式的类型: Expression Type Equivalent expressions (yield same value) ---------- ---- ----------------------------------------- ptr char ** &ptr[0] *ptr char * ptr[0] *(ptr+i) char * ptr[i]; &ptr[i][0] **ptr char ptr[0][0] *(*(ptr+i)) char ptr[i][0]; *ptr[i] *(*(ptr+i)+j) char ptr[i][j] 从而: > ptr可以被视为一个字符串数组(2-d char数组) 至于设置指针,这种安排假设所有内容都已经被分配为静态数组或动态地通过malloc.你不能只写 char **ptr = {"foo","bar","bletch"}; // using aggregate initializer on // non-aggregate type; bad juju,// a.k.a undefined behavior 要么 char **ptr; // ptr has not been initialized to point anywhere ptr[0] = "foo"; // dereferencing ptr via subscript invokes undefined ptr[1] = "bar"; // behavior ptr[2] = "bletch"; 通常,当您使用指针时,就像它是一个数组一样,您将使用malloc或类似的东西来分配缓冲区: char **ptr = malloc(sizeof *ptr * N); if (ptr) { ptr[0] = "foo"; // ptr[i] gets address of ptr[1] = "bar"; // string literal ptr[2] = "bletch"; ... } 要么 char **ptr = malloc(sizeof *ptr * N); if (ptr) { size_t i; for (i = 0; i < N; i++) { ptr[i] = malloc(sizeof *ptr[i] * M); // strictly speaking,the sizeof if (ptr[i]) // is not necessary here { //initialize ptr[i] } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |