c语言传递二维数组

本文探讨了C语言中二维数组传递的问题,指出直接声明的二维数组不能直接通过二级指针传递,而需要使用动态分配内存的方式。作者通过示例代码展示了错误的传递方式以及修正后的解决方案,并强调了在C++中应尽量使用如`vector`等数据结构替代二维数组。

很早以前,还是学c语言的时候,,当我把,数据类型,常量变量,语句控制,函数,指针,结构体,自定义数据类型,还有一些简单人递归,研究完的时候,本以为c语言学的能及格了..那天看到一本c语言的书.令我不敢相信,将近1000页的书..感到很是惊异,那么厚的书只有在c++,java这样库比较多的语言的书中才能看到..

最后得出结论,我的c语言还没及格,,,

 

偶然遇到一个c语言传递二维数组的问题..以前学的时候没有想到...试着做了一个...并不是自己想的那样手到擒来的..

我开始写的是这样的:

 

#include<iostream>

using namespace std;

 

typedef vector<int> cn;

 

void show(int n1, int n2 ,int *p[])

{

    for(int i=0;i<n1;i++)

    {

        for(int j=0;j<n2;j++)

        {

            p[i][j]++;

            cout<<p[i][j]<<" ";

        }

C语言传递二维数组指针有以下几种常见方法: ### 方法一:传递二维数组名 可以直接将二维数组名作为参数传递给函数,在函数中使用二维数组的形式访问元素。因为数组名在大多数情况下会隐式转换为指向其首元素的指针。 ```c #include <stdio.h> // 函数接收二维数组,第二维大小必须指定 void printArray(int arr[][2], int rows) { for (int i = 0; i < rows; i++) { for (int j = 0; j < 2; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } int main() { int a[3][2] = {{1, 2}, {3, 4}, {5, 6}}; printArray(a, 3); return 0; } ``` ### 方法二:传递二维数组指针 使用二维数组指针作为函数参数,这种方式明确指定了指针指向的是一个二维数组。 ```c #include <stdio.h> // 函数接收二维数组指针 void printArray(int (*arr)[3][2]) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { printf("%d ", (*arr)[i][j]); } printf("\n"); } } int main() { int a[3][2] = {{1, 2}, {3, 4}, {5, 6}}; int (*ptr)[3][2] = &a; printArray(ptr); return 0; } ``` ### 方法三:传递一维数组指针 传递指向二维数组第一行的指针,在函数中通过指针运算访问元素。 ```c #include <stdio.h> // 函数接收一维数组指针 void printArray(int (*arr)[2], int rows) { for (int i = 0; i < rows; i++) { for (int j = 0; j < 2; j++) { printf("%d ", *(arr[i] + j)); } printf("\n"); } } int main() { int a[3][2] = {{1, 2}, {3, 4}, {5, 6}}; int (*ptr)[2] = a; printArray(ptr, 3); return 0; } ``` ### 方法四:传递`int *`型指针 将二维数组首元素的地址传递给函数,通过指针运算访问元素。 ```c #include <stdio.h> // 函数接收int *型指针 void printArray(int *arr, int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("%d ", *(arr + i * cols + j)); } printf("\n"); } } int main() { int a[3][2] = {{1, 2}, {3, 4}, {5, 6}}; int *ptr = &a[0][0]; printArray(ptr, 3, 2); return 0; } ``` ### 方法五:传递`int **`型指针 使用动态分配内存的二维数组传递`int **`型指针。 ```c #include <stdio.h> #include <stdlib.h> // 函数接收int **型指针 void printArray(int **arr, int rows, int cols) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } int main() { int a[3][2] = {{1, 2}, {3, 4}, {5, 6}}; int **ptr = (int **)malloc(3 * sizeof(int *)); for (int i = 0; i < 3; i++) { ptr[i] = a[i]; } printArray(ptr, 3, 2); free(ptr); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值