二级指针什么时候用到,请教C语言高手什么情况下要用到二级指针

1 , 请教C语言高手什么情况下要用到二级指针用处多了比如定义一个字符串"HEllo","china"就用二级指针做COM的时候这个和编译环境也有关系的 。你可以去别的环境试试看 。
2,C语言中二级指针有什么用哦这个挺难表达的 , 我尽力表述下 。相信一位数组应该明白的吧?例A【0】画一个1列5行的表格(作为表格A)二维数组呢 。你可以先画个5行5列的表格(作为表格B) 。A【1】【1】表达的第二行第二列 。而且A[0]在一维中表达是首地址,就是A表格中的第一行 。但是在二维数组中就是表示表格B中整个第一行 。二级指针的话,估计我没学的太深入 , 不是很清楚 。希望能帮到你 。如果有兴趣讨论国二C语言的话,可以加我 。
3 , 双重指针什么时候可以用到什么时候用到:你应该学了数据结构了吧,难道List没用到?有时建立二维矩阵的时候也可以用到建立二叉树时使用双重指针的理由在于方便操作且安全,避免空间的重复释放..指针的指针.. 还是一个指针....就这么用..貌似很少用到.可能在多维数组里.要用到.... 我说的意思是 。双重指针其实就是指针的指针 。依旧是个指针.指向指针的指针不是双重指针.而是指针....... 想明白一点.为什么说在多维数组里会用到.拿二维的来说:a[10][10], ..你要想用一个指针指向这个多维数组的话那就需要一个双重指针.int **p=a;.是这样赋值的...也可以就用个指针指向它int (*p)[10]=a;... 其实一般都很少用到...因为双重指针.不管你几重,它还是个指针...重数越多.越麻烦..指针本来就是个麻烦的东西.【二级指针什么时候用到,请教C语言高手什么情况下要用到二级指针】
4 , 二级指针的用法#include<stdio.h>main()int a[5]=int *num[5],i;int **p;for(i=0;i<5;i++)num[i]=&a[i];p=num;for(i=0;i<5;i++)printf("%d ",**p);p++;}}#include<stdio.h>main()char **p;int i;for(i=0;i<5;i++)p=name+i;printf("%s\n",*p);}} 指向指针数据的指针用的是“二级间址”方法,从理论上说,间址方法可以延伸到更多的级,即多重指针 。但实际上在程序中很少有从超过二级间址的 。级数愈多,愈难理解 。用内存地址去理解吧,一级指针是指向定义类型的内存地址,二级指针就是指向定义类型的内存地址所指向的新的内存地址 。我举一个例子 。#include <stdio.h>void main()char **p;int n;printf("请输入日期:\n");scanf("%d",&n);printf("对应英语日期:%s\n",*(p n-1));/* *(p n-1)还是指针 , 指向的n-1位元素的首地址 */}这就是二级指针的用法,定义一个指针数组*day[]里面包含7个字符串,如果你想输出字符串,你就需要一个二级指针 , 因为一级指针只能寻址到字符串所在的位置,如:n=3 , *p则能找到星期三所在的位置而已,并不能将其输出,因为没有其首地址,而**p则完成二级寻址,找到了星期三,也找到了它的首地址 , 所以能输出(字符串输出指针移动是系统自动移动的)指针就是指针,你不要老想着什么二级还是三级 , 就见怪不怪了比如说,一个链表栈:struct TStackint data;struct TStack * next;};这个链表里面每个元素都是一个struct TStack *指针 。那么怎样写函数,才能通过函数参数进行指针的管理呢?比如两个操作push(top, new_item)和pop(top, new_item),这时就用到了二级指针 。为了便于理解,我们这样定义:typedef struct TStack * PStack ;然后这样定义push:void push(PStack * top, int new_item)PStack n = new PStack;n->data = http://www.lisdn.com/gkrj/shjy/new_item;n->next = *top;*top = n;}这样就通过取参数top的指针完成了对新元素压栈的操作,上面的函数声明等同于void push(struct TStack ** top, int new_item);就是二级指针了 这样的话你用的时候就不用考虑这个栈的第一个元素需不需要初始化的问题int main(void)int data = 0; struct TStack * top = 0;doscanf("%d", &data);push(&top, data); /*注意取指针top的地址*/...} while(data);return 0;}聪明的你一定会问,为什么不能写void push(struct TStack * top, int data)呢?观察程序体就会发现,如果这样写,其实top是不可以被修改的变量 , 后面的程序虽然 n->next = top没有问题,但是如果想调整top = n就会在编译器上出错,因为top是个地址,在调用函数的时候参数本身不能被修改,除了指针除外所以我们引用二级指针,表示指针本身的地址保持不变 , 其地址指向的内容能为我所用 。不知道您看明白没有?

    推荐阅读