探究二维数组的传递
来源:互联网 发布:手机短信平台软件 编辑:程序博客网 时间:2024/05/16 07:34
<span style="font-family: Arial, Helvetica, sans-serif;"><pre name="code" class="cpp"></span>
#include <stdio.h>const int MAXN = 3;int arr[MAXN][MAXN];void func1(int ptr[MAXN][MAXN],int N){// 可行(常用) // 或 (*ptr)[MAXN] 或 ptr[][MAXN] ; for(int i=0; i<N; i++){for(int j=0; j<N; j++){printf("%d ",ptr[i][j] );} printf("\n");}}void func2(int *ptr, int N){// 可行 ( 指针降级 ) for(int i=0; i<N; i++){for(int j=0; j<N; j++){printf("%d ",(ptr+i*N)[j] );} printf("\n");}}void func3(int **ptr, int N){// 不可行 (访问越界) /* 为什么 int (*ptr1)[MAXN] 可用而 int **ptr2 不可用 : ptr1, ptr2都指向原数组arr的首地址 , 如 0x407020但是 ptr2指向的东西, 也就是 int *, 是一个指针类型的变量, 是一个变量 那么 *ptr2( 同ptr2[0] )就相当于取出 ptr2指向的那块内存(0x407020)所存的变量的值 , 也就是 0x407020处即a[0][0]的数据值(假设a[0][0]=4). 那么ptr2[0][1] 就是把地址为 0x4 的一段连续内存当做数组(实际上不是数组), 取这个数组的[1], 也就是第二个元素 (地址为0x8), 造成内存访问越界 而 ptr1指向的类型的 int [MAXN] , 是一个int型的数组而不是一个变量那么 *ptr1( 同ptr1[0] )就是取出 ptr1指向的那块内存(0x407020)所存的数组(数组不是一种类型),是一段连续的内存 , 那么 ptr1[0][1]自然就是 取出以的 (0x407020) 为首地址的数组中的第二个元素 , 正常访问 */printf("%d",*(ptr+1));for(int i=0; i<N; i++){for(int j=0; j<N; j++){printf("%d ",(ptr+i*N)[j] );} printf("\n");}}int main(){for(int i=0; i<MAXN; i++){for(int j=0; j<MAXN; j++){arr[i][j] = i+j;} }func1(arr,MAXN);func2((int*)arr,MAXN);func3((int**)arr,MAXN);return 0;}
0 0
- 探究二维数组的传递
- 二维数组的传递
- 二维数组的传递
- 二维数组的传递
- 探究二维数组与指针的关系
- 二维数组的传递方式
- 二维数组参数的传递
- 二维数组的参数传递
- 二维数组的传递方式
- 二维数组的传递方式
- 二维数组的参数传递
- 二维数组的参数传递
- 二维数组的参数传递
- 探究二维数组
- C/C++--定义二维数组及二维数组的传递
- 二维数组参数的传递,多维同理
- C/C++ 中二维数组的传递
- 二维数组的动态分配及参数传递
- strcat
- Intel MCE CMCI (二) CMCI的LAPIC接口
- dedecms 创建二级菜单
- UI08_UITableView界面传值
- GridView表格抬头列值复选筛选
- 探究二维数组的传递
- 安卓:ViewPager,添加图片方式2及标题版,自动轮播版(第一种)
- IOS导航栏透明效果
- Android 开发中的日常积累
- UIActionSheet 操作表
- 查询mysql数据库中的存储过程
- HDU 5491 The Next 构造(2015 ACM/ICPC Asia Regional Hefei Online)
- 【Android】使用Wifi连接ADB调试App
- 1018:Big Number