一種C語言建立超大二維陣列的辦法
最近需要寫一套JNI來紀錄整個螢幕的畫素資訊(9屏截圖),於是想建立一個二維陣列方便快捷地進行儲存,結果炸開了:
基本可以百分百肯定是棧空間不足,但我又不想增加棧空間,那怎麼辦呢?其實還是有辦法的。
首先二維陣列是什麼呢?其實就是兩部分組成,一個一維指標陣列,然後數組裡面的每個指標指向(儲存)了一個唯一對應的定長陣列的首地址而已。(同理,三維陣列,就是三部分組成,第一部分是指向一堆等長一維指標陣列的指標,第二部分是這些指標指向的一維指標陣列,第三部分就是陣列),如圖:
一維陣列:
二維陣列:
三維陣列:
好的,道理我們懂了,那麼怎麼做呢?既然一次建立會爆炸,那我們可以分步建立的啦:
1、第一步,以int二維陣列為例,以寬度(或高度)建立專門裝int陣列頭地址int*指標陣列
2、第二步,以寬度(或高度)遍歷剛剛的int*地址陣列,給每個地址陣列建立一個高度(或寬度)為大小的int陣列空間,並把空間頭地址給予int*地址陣列對應的位置。
效果如下,順利執行。
相關推薦
一種C語言建立超大二維陣列的辦法
最近需要寫一套JNI來紀錄整個螢幕的畫素資訊(9屏截圖),於是想建立一個二維陣列方便快捷地進行儲存,結果炸開了: 基本可以百分百肯定是棧空間不足,但我又不想增加棧空間,那怎麼辦呢?其實還是有辦法的。 首先二維陣列是什麼呢?其實就是兩部分組成,一個一維指標陣列,然後數組裡面的每個指標指向
c語言 建立動態二維陣列 讀取txt檔案到陣列
int**P; P = (int**)malloc(sizeof(int)*M); for (int i = 0; i < M; i++){ P[i] = (int*)malloc(si
c語言 將一個二維陣列行和列的元素互換,存到另一個二維陣列中
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
C語言筆記--利用二維陣列輸出楊輝三角形
楊輝三角形又稱帕斯卡三角形,其餘的話就不多說,先看下面的三角形: &nb
c++ 動態建立的二維陣列儲存到csv檔案中
void PreProcessFunction::saveTwoDimentionArr2csv(signed short **arr, int row, int col, char*filename) { ofstream outFile; outFile.open(f
程式設計基礎-------C語言函式返回二維陣列的做法
在C語言中,有時我們需要函式的返回值為一個二維陣列。這樣外部函式接收到這個返回值之後,可以把接收到的二維陣列當成矩陣操作(外部函式不可用普通的一級指標接收返回值,這樣的話,外部函式將不知道它具有二維性)。方法如下: 法1.沒有使用typedef型別定義 #inc
用C語言分配動態二維陣列(結構體實現)
#include<stdio.h> #include<stdlib.h> typedef struct { double **mat; int m; int n; }Matrix; void InitialMatrix(Matrix *T,in
【C語言基礎】1-5 C語言迴圈與二維陣列
C語言迴圈與二維陣列 知識點 break與continue break:break語句在switch-case語句中是跳出。break語句在迴圈中還有另一種用法。當迴圈中遇到break語句時,立即結束迴圈,跳到迴圈體外,執行迴圈結構後面的語句 conti
c++語言 如何計算二維陣列行數和列數
對於一個二維陣列如: int a[2][5]; 求陣列元素的總數: sizeof(a) / sizeof(int) 而陣列行數則為 :( sizeof(a) / sizeof(int) )/ ( sizeof(a[0]) / sizeof(int) ) 求陣列列數: siz
【學習C++】建立動態二維陣列
1 int **a=new int*[l];a[i]=new int[l]; #include <iostream> using namespace std; //int l=2; int main() { int l,i,j; cout<<
C語言 字符二維數組(多個字符串)探討 求解
字符數 沒有 一個 spa style 字符串類 hello world c語言 字符 什麽是二維字符數組? 二維字符數組中為什麽定義字符串是一行一個? “hello world”在C語言中代表什麽? C語言沒有字符串類型? C語言 字符二維數組(多個字符串)探討 求解
介紹給新手的一種C語言學習方法
對於C語言的學習,不同的人有不同的經歷和不同的方法,當中許多方法都具備相對完整的步驟和不錯的功效。然而事過境遷,多年以後回頭看看走過的路,卻很難理順當初所留下的痕跡。培訓新同事或者是在CSDN上解答問題的時候,發現當中有些不錯的苗子,由於缺乏適當的引導,最終會很長一段時間陷
[C語言]給一個二維字元陣列賦值的問題
我一開始是想寫一個下五子棋的程式,打算用一個字元二維陣列構造棋盤: #include <stdio.h> char a[10][10]; void p(char a[10][10]); int main(void) { int i, j; for (i =
C語言建立一個二叉樹
如何建立一個二叉樹,先序遍歷,中序遍歷。 #include <stdio.h> #include <stdlib.h> #include<bits/stdc++.h&g
C語言動態申請三維陣列的三種方法
方法一:用陣列指標形式申請一個三維陣列。 #include <stdio.h> #include <stdlib.h> int main() {
C++找出一個二維陣列中的鞍點,即該位置上的元素在該行上最大,在該列上最小(也可能沒有鞍點)
今日正式用csdn部落格記錄,回顧我所學到的知識,分享一些我的人生感悟和自身經歷。也希望未來通夠過此平臺和更多喜愛程式設計的人交流學習。 道聽途說再加上自己的感悟,認為程式設計最重要的是思想,而不是語言本身,語言只是個工具。所以我們得先學思想。遇到問題,應該先想如果是自己去做會怎麼處理,但我們不
C++如何動態申請二維陣列
最近在寫cuda相關的程式碼遇到矩陣的問題就避免不了二維動態陣列的記憶體申請。所以實際測了一下,一下程式碼可以用。 #include <iostream> #include <stdlib.h> int main() { double **V,*h_c; V = (
C#呼叫C++的dll傳遞二維陣列
1.C++中標頭檔案.h extern "C" MATHFUNCSDLL_API int __stdcall CallTest(int** arr, int rows, int cols); 2.C++中原始檔.cpp int __stdcall CallTest
C ++ 指標 | 指標與二維陣列_5
指標與二維陣列 根據上面的圖,我現在寫一些語句,我們一起來判斷輸出值是多少!! int (*p)[3] = B; print B; 這個會列印多少? 思考一下。。。。。。。 。。。 。。。 。。。 列印: 400 print *B;
在Unity3D中利用描點法畫圓——使用C# 泛型List二維陣列
二維陣列的使用舉例: List <List <int >> array1 = new List <List <int >>(); List <int> array2 = new List <