二维数组 指针数组

部署运行你感兴趣的模型镜像

#include<iostream>
using namespace std;
int main()
{
   int v[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}};
   int (*a)[10]=v;                              //数组指针,指向数组(大小为10)的指针
   cout<<sizeof(v)<<endl;                       // 整个二维数组的大小4*2*10=80
   cout<<sizeof(a)<<endl;                       // 指针大小4个字节
   cout<<**a<<endl;                             //输出数组首个元素1
   cout<<*a<<endl<<a[0]<<endl<<a<<endl;         //&v[0][0]的值
   cout<<**(a+1)<<endl<<*(a[1])<<endl;          //输出数组第二行的首个元素11
   cout<<*(*a+1)<<endl<<*(a[0]+1)<<endl;        //输出数组第一行的第二个元素2
   return 0;
}

输出结果:





您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 二维数组指针数组的概念及用法 #### 1. 二维数组指针的关系 在C/C++中,二维数组可以被看作是一个由多个一维数组组成的结构。通过指针操作,可以直接访问这些数组中的元素。对于二维数组 `arr[M][N]`,可以通过定义一个指向该数组指针来实现对其灵活的操作。例如,在引用[1]中提到的声明方式为 `int (*ptr)[N]`,这表示 `ptr` 是一个指向包含 N 列的整型数组指针。 以下是基于引用[1]的一个简单示例代码展示如何使用这种类型的指针: ```c #include <stdio.h> int main() { int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; int (*ptr)[3] = arr; // 定义并初始化指向二维数组指针 for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("%d ", ptr[i][j]); } printf("\n"); } return 0; } ``` 上述代码展示了如何利用指针变量 `ptr` 来遍历整个二维数组的内容[^1]。 --- #### 2. 指针数组的应用 指针数组是一种特殊的数组形式,其每一个元素都是一个指针类型的数据。它可以用来存储不同的一维数组地址或者字符串地址等复杂数据结构。当涉及到多组独立的一维数组时,这种方法非常有用。 下面的例子来自引用[3],演示了如何创建一个多级指针体系以管理两个不同的二维数组 `a` 和 `b` 的情况: ```c #include <iostream> #include <stdio.h> int main() { int a[3][4] = { {1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6} }; int b[3][4] = { {10, 11, 12, 13}, {11, 12, 13, 14}, {12, 13, 14, 15} }; // 创建一个指针数组,分别指向 a 和 b int(*aa[2])[4] = { a, b }; // 输出特定位置上的值 printf("%d\n", aa[1][2][1]); // 访问 b 数组第 3 行第 2 列的值 // 打印内存地址差值计算结果 printf("%ld\n", (long)(aa[1][2] - aa[1][0])); return 0; } ``` 此段代码说明了一个复杂的嵌套指针机制,其中包含了从低维度到高维度逐层递增的过程,并最终实现了跨多个二维数组之间的切换和定位功能[^3]。 --- #### 3. 关于动态分配二维数组及其指针表达式的注意事项 如果尝试将普通的双星号 (`**`) 类型作为参数传递给函数,则需要注意实际传入的对象可能并不完全匹配预期的形式。比如在引用[2]里给出的那个例子就存在这样的问题——虽然语法上看起来合理,但由于底层布局差异而导致运行期错误发生。因此建议采用固定大小列宽的方式来构建真正的二维数组模拟效果更好一些。 正确做法如下所示: ```cpp void func(int rows, int cols, float array[][cols]) { array[1][1] = 0.f; } // 调用时需指定第二维长度 func(2, 3, someFloatArray); ``` 这样做的好处在于能够充分利用现代编译器优化特性的同时保持良好的可读性和兼容性[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值