打印 数组指针 指针

#include <stdio.h>
void main()
{
    int a[5][5]= {{10,20,30,40,50},{11,21,31,41,51},{12,22,32,42,52},{13,23,33,43,53},{14,24,34,44,54}};
    int aa[5]= {1,2,3,4,5};
    int *pp;
    int (*p)[4];
    int i,j;
    p=a;
    pp=aa;

    printf("第一种输出[数组指针]的方法\t\t\t\t\t\\第二种输出[数组指针]的方法\n");
    for(i=0; i<5; i++)
    {
        for(j=0; j<4; j++)
        {
            printf("p[%d][%d]:%d\t",i,j,*(*(p+i)+j));
        }
        printf("\\");
        for(j=0; j<4; j++)
        {
            printf("p[%d][%d]:%d\t",i,j,p[i][j]);
        }
        printf("\n");
    }
    printf("\n");
     printf("第一种输出[指针]的方法\t\t\\第二种输出[指针]的方法\n");
    for(j=0; j<4; j++)
    {
        printf("pp[%d]:%d",j,*(pp+j));
    }
    printf("\t");
    printf("\\");
    for(j=0; j<4; j++)
    {
        printf("pp[%d]:%d",j,pp[j]);
    }
    printf("\n");

}

 

### C/C++ 中指针数组数组指针的区别 #### 定义差异 指针数组是一个数组,其中每个元素都是指向某种类型的指针。而数组指针是指向整个数组指针。 对于指针数组而言,声明形式如下所示: ```c int *ptrArray[10]; ``` 这表示 `ptrArray` 是一个含有十个整型指针数组[^1]。 而对于数组指针,则有不同之处: ```c int (*arrPtr)[10]; ``` 这里说明 `arrPtr` 是一个指向含十个整数的一维数组指针。 #### 存储方式的不同 当创建一个指针数组时,实际上是在内存中分配了一块连续的空间用于存储多个指针变量;每一个这样的指针都可以独立地指向其他地方的数据对象。然而,在定义了一个数组指针之后,它只占用单个指针大小的空间,并且该指针所指向的是另一个已经存在的数组的第一个元素的位置[^3]。 #### 使用场景对比 - **指针数组的应用** - 动态字符串处理:由于字符串是以字符序列的形式存在,因此可以通过指针数组来管理一组动态分配的字符串。 - **数组指针的应用** - 处理多维数组:如果有一个二维或多维矩阵需要传递给某个函数参数列表中的形参位置上,那么就可以考虑采用数组指针的方式来进行操作[^2]。 #### 示例代码展示 ##### 指针数组的例子 下面这段程序展示了如何利用指针数组实现简单的字符串集合打印功能: ```c #include <stdio.h> #include <string.h> #define SIZE 4 void printStrings(char* strArr[]) { for (int i = 0; i < SIZE; ++i){ printf("%s\n", strArr[i]); } } int main(){ char *strList[]={"Hello","World","C","Programming"}; printStrings(strList); return 0; } ``` ##### 数组指针的例子 此例子演示了怎样通过数组指针访问并修改一个多维数组内容: ```c #include <stdio.h> #define ROWS 3 #define COLS 4 // 函数接受一个指向一维整形数组指针作为输入参数 void modifyMatrix(int(*matrix)[COLS], int rows) { for (int r = 0; r < rows; ++r){ for (int c = 0; c < COLS; ++c){ matrix[r][c] *= 2; } } } int main(){ int data[ROWS][COLS]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; modifyMatrix(data, ROWS); // 打印结果验证更改是否成功应用到原数据集上 for (size_t row=0 ;row<ROWS;++row){ for (size_t col=0;col<COLS;++col){ printf("%d ",data[row][col]); } putchar('\n'); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春意盎然的三月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值