27.二重指针和二维数组


这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述


因格式问题,截图上传。


27.double_pointer
/*
 * 公司:XXXX
 * 作者:Rston
 * 博客:http://blog.csdn.net/rston
 * GitHub:https://github.com/rston
 * 项目:二重指针和二维数组
 * 功能:演示二重指针的用法。
 */
#include <stdio.h>

void func(int **p)
{
    *p = (int *)0x12345678;
} 

int main(int argc, char **argv)
{
    // 二重指针指向一重指针的地址
    int a = 10;
    int *p1 = &a;       // 一重指针,指针指向的变量类型为int类型
    int **p2 = &p1;     // 二重指针,指针指向的变量类型为int *类printf("*p1 = %d. **p2 = %d.\n", *p1, **p2);    // *p1 = 10. **p2 = 10.

    // 二重指针指向指针数组
    int c = 12, d = 15; 
    int *p3 = &c, *p4 = &d;
    int *array[2] = {p3, p4};   // 定义指针数组,数组元素为int *类int **p5 = array;           // 数组名array做右值时表示数组首元素首地址,即int **类型
    printf("**p5 = %d. **(p5+1) = %d.\n", **p5, **(p5+1));  // **p5 = 12. **(p5+1) = 15.

    // 在某个函数内部通过二重指针传参改变一重指针的指向
    int f = 20;
    int *p6 = &f;
    printf("p6 = %p.\n", p6);   // p6 = 0xbfd2f3b8.
    func(&p6);
    printf("p6 = %p.\n", p6);   // p6 = 0x12345678.

    return 0;
}

27.darray
/*
 * 公司:XXXX
 * 作者:Rston
 * 博客:http://blog.csdn.net/rston
 * GitHub:https://github.com/rston
 * 项目:二重指针和二维数组
 * 功能:演示二维数组的两种访问方式。
 */
#include <stdio.h>

int main(int argc, char **argv)
{
    int a[2][3] = {{1, 2 ,3}, {4, 5, 6}};
    int i = 0, j = 0;

    // 通过下标访问二维数组
    for (i=0; i<2; i++)
    {
        for (j=0; j<3; j++)
        {
            printf("a[%d][%d] = %d.\n", i, j, a[i][j]); // a[0][0] = 1. a[0][1] = 2. a[0][2] = 3.
        }                                               // a[1][0] = 4. a[1][1] = 5. a[1][2] = 6.
    }

    // 通过指针方式访问二维数组
    int (*p)[3] = a;
    for (i=0; i<2; i++)
    {
        for (j=0; j<3; j++)                                  
        {
            printf("a[%d][%d] = %d.\n", i, j, *(*(a+i)+j)); // a[0][0] = 1. a[0][1] = 2. a[0][2] = 3.
            printf("a[%d][%d] = %d.\n", i, j, *(*(p+i)+j)); // a[1][0] = 4. a[1][1] = 5. a[1][2] = 6.
        }                                                   
    }

    return 0;
}

27.darray_pointer
/*
 * 公司:XXXX
 * 作者:Rston
 * 博客:http://blog.csdn.net/rston
 * GitHub:https://github.com/rston
 * 项目:二重指针和二维数组
 * 功能:演示二维数组和指针的纠葛。
 */
#include <stdio.h> 

int main(int argc, char **argv)
{
    int array[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int i = 0, j = 0;

    // 指针指向二维数组的数组名
    int (*p1)[2] = array;
    for (i=0; i<3; i++)
    {
        for (j=0; j<2; j++)
        {
            printf("*(*(p1+%d)+%d) = %d.\n", i, j, *(*(p1+i)+j));
        }
    }

    // 指针指向二维数组的第一维
    int *p2 = array[0];
    printf("*(p2+1) = %d.\n", *(p2+1));     // *(p2+1) = 2.

    // 指针指向二维数组的第二维
    int *p3 = &array[0][0];
    printf("*(p3+1) = %d.\n", *(p3+1));     // *(p3+1) = 2.

    return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值