定义指向指针的指针,关于C语言中指向指针的指针

1,关于C语言中指向指针的指针int a=1; int *a_ptr=&a; int **p_ptr=a_ptr;是这样的 。没有错误 。printf("%d",**p);输出的格式也是这样的,需要用**来解除指针引用,取得数据 。
2 , 指向指针的指针是什么有什么用用处相当地大.怎么样函数传递改变一个指针的值,必须通过指向指针的指针,也就是传说中的二级指针.在数据结构中用处很广.最普遍的比如说链表,通过调用函数改变了链表中的元素,那么整个链表就发生了变化,这种情况下就会用到二级指针,因为链表的起始是通过指向头结点的指针来执行的,所以必须要改变这个指针,怎么样使一个指针改变?在形参传递时,必须传递指针的地址,也就是指向指针的指针.太抽象了,慢慢体会
3,如何定义指向指针的指针呢直接两个※就行了啊 呵呵定义一个结点结构体 , 里面放一个接点的*next指针 下面就能调用了typedef structnode{structnode*next}hehe;是介个么?比如char* a = "abcdefg";a就是个字符指针,那么char** b = &a;b就是指向a的指针,就是字符指针a的指针【定义指向指针的指针,关于C语言中指向指针的指针】
4 , c语言中指向指针的指针#include<stdio.h>#include<stdlib.h>#define M 3#define N 3void main()for(i=0;i<M;i++) //问题出在这里. i你给写成j了.for(j=0;j<N;j++)scanf("%d",&b[i][j]);for(i=0;i<M;i++)void add(int **a,int **b,int **c,int rows,int cols)指向指针的指针指得是指向地址得地址5,指向指针的指针哥哥来帮你分析~这里有两种写法:1, #include<stdio.h>main() int a[2][2]= int (*p)[2];//指向二维数组的行的指针, 相当于二级指针**p, 这里指向的而维数组的列必须是2 p=a ;//数组a的首地址赋给p printf("%d",*(*(p+1)+1)) ;//等价于a[1][1]getch() ;}2,#include<stdio.h>main() int a[2][2]= int *p; p = &a[0][0];//数组a的第一个元素的地址赋给p printf("%d", *(p+3) ) ; //等价于a[1][1]getch() ;}p1是一个指向整型的指针,p2也是指向整型的指针,他们的值都是一个地址,那么p1=p2就是把p2的指向整型的地址赋给p1这个指向整型的指针,由于类型相同是可以直接赋值的,不会出错 。看标题的话,楼主的意思应该是p1=&p2 将p1的值是p2的地址,也就是指向指针的指针 。这样肯定错了,因为p1的类型是指向整型变量的,而赋给它一个指向整型变量的指针的地址肯定是错的,因为类型不同,你要p1指向一个指向整型的指针,那么就必须定义p1为:int *(*p1);此时它才是指向指向整型的指针,这样才可以赋地址给它 。哥哥来帮你分析~这里有两种写法:1, #include<stdio.h>main() int a[2][2]= int (*p)[2];//指向二维数组的行的指针, 相当于二级指针**p, 这里指向的而维数组的列必须是2 p=a ;//数组a的首地址赋给p printf("%d",*(*(p+1)+1)) ;//等价于a[1][1]getch() ;}2,#include<stdio.h>main() int a[2][2]= int *p; p = &a[0][0];//数组a的第一个元素的地址赋给p printf("%d", *(p+3) ) ; //等价于a[1][1]getch() ;}应该这样写:#include<stdio.h>main() int a[2][2]= int (*p)[2] ; p=a ; printf("%d",*(*(p+1)+1)) ;// getch() ;}应该这样写:#include<stdio.h>main() int a[2][2]= int (*p)[2] ; p=a ; printf("%d",*(*(p+1)+1)) ;// getch() ;}

    推荐阅读