C++动态申请数组和参数传递问题

来源:互联网 发布:徐州淘宝店铺装修 编辑:程序博客网 时间:2024/05/18 14:13

    最近在做数字视频处理作业时,经常遇到需要对视频的帧数据进行挨个的处理。其中就涉及到了两个问题:

            1、如何申请一个和图像帧数据同等大小的二维数组?

            2、如何对二维数组进行函数操作,即参数传递问题。

     首先,解决动态申请二维数组问题。在之前写的博客(http://blog.csdn.net/shawpan/article/details/8971845)中详细的讨论了如何用C语言动态申请数组。这里,介绍一下用C++如何创建。使用new申请内存,最后,使用delete函数释放内存。

int ** ga = new int*[row];for(int i = 0; i < row ; i++)ga[i] = new int[col];
        for(i = 0; i < row; i++)delete []ga[i];delete []ga;

    对于动态申请的二维数组,使用指针对其进行操作,在参数传递的过程中,由于传递的是指针,故在函数内部的操作,都会影响到数组本身。具体的例子如下:
#include<iostream>using namespace std;void print(int row,int col,int **ga){for(int i = 0;i < row ; i++){for(int j = 0;j < col; j++){cout<<ga[i][j]<<" ";}cout<<endl;}        cout<<endl; }void set(int row,int col,int **p){for(int i = 0;i < row ; i++){for(int j = 0;j < col; j++){p[i][j] = 5;}}}int main(){int row,col;cout<<"input row"<<endl;cin >>row;cout<<"input col"<<endl;cin >> col;//动态申请二维数组int ** ga = new int*[row];for(int i = 0; i < row ; i++)ga[i] = new int[col];for(i = 0;i < row ; i++)for(int j = 0;j < col; j++){ga[i][j] = i+j;}print(row,col,ga);set(row,col,ga);print(row,col,ga);//回收内存for(i = 0; i < row; i++)delete []ga[i];delete []ga;return 0;}
运行结果如下:


1 0
原创粉丝点击