void f(char **c){
cout<<c[1][2]<<endl;
}
int main(){
char *c[3]={
"abc","def","ghi"};
f(c);
这里的f(char **c) 指向指针的指针
所以调用时一定要 使用指针 *c[3] 定义指针数组 c 第一个指针变量的地址。
指针的地址 用指向指针的指针存放
二、例如:int a[3][4]={…}
-
a[i] :指向i行0列元素地址;
a[i]+j:指向i行j列元素地址;
-
&a[i]:指向i行首地址;
&a[i]+j:指向i+j行首地址;
可用**(&a[i]+j)取出该地址存储的元素
*注:涉及到的优先级排序:a[] > a(解引用) = &a(取址) > a+b
// ptr2是一个指向 int * 的指针,即ptr2的类型和&ptr是一样的,注意:ptr指向的内存区域不定长
int * ptr2[3]={arr1,arr2,arr3}; //这是一个指针数组
// ptr3是一个指向 int [3] 的指针,即ptr3的类型和&arr1的类型是一样的,注意:arr1指向的内存区域定长
int(* ptr3)[3]=&arr1; 这是一个行指针
// ptr3=ptr2;//error 无法从“int [3]”转换为“int ()[3] 二者的储存地址类型不同,尽管地址数字相同,类型不同,不能转化赋值。
int ** ptr4;
//ptr4=&arr1; //error 无法从“int (*)[3]”转换为“int**"//arr1 是二维数组
//这些代码将相互的关系表明了
int arr1[3];
int arr2[3];
int arr3[3