二级指针相关问题

二级指针

先来看代码:

int a = 10;
int b = 20;
int* p = &a;
int** pp = &p;
*pp = &b;
printf("%d\n",*p);

输出结果: 20

分析:代码第3行一级指针p存的值是a变量的地址值,代码第4行二级指针pp存的值一级指针的地址值,这里pp指代的是p,故代码第五行pp = &b等价于p = &b,所以结果输出为20。

看图:

二级指针相关问题
由此图类推,多级指针类似。

指针数组与二级指针的遍历

指针数组的遍历:

int a[] = {1,2,3};
int b[] = {4,5,6};
int c[] = {7,8,9};
int* arr[] = {a,b,c};//数组名存的是首元素的地址
for(int i =0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        printf("%d ",arr[i][j]);//二位数组形式打印
        printf("%d ",*(arr[i]+j));
        printf("%d ",*(*(arr+i)+j);
    }
}

​ 二级指针的遍历:

int a[] = {1,2,3};
int b[] = {4,5,6};
int c[] = {7,8,9};
int* arr[] = {a,b,c};
int** p = arr;
for(int i =0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        printf("%d ",p[i][j]);//二位数组形式打印
        printf("%d ",*(p[i]+j));
        printf("%d ",*(*(p+i)+j));
    }
  puts("");
}

它与指针数组高度类似,二级指针变量p增加偏移量,相当于跳过了一个一维数组的大小,一级指针增加偏移量,先当与跳过了一个元素。

上一篇:IE6、IE7、IE8中overflow:hidden无效问题


下一篇:Soot 命令简要记录