三維指標比三維陣列快嗎,為什麼指標運算比陣列運算快得多

2024-12-22 13:05:05 字數 3150 閱讀 5452

1樓:豆豆的人啊

差不多一樣快,編譯器會把陣列翻譯成指標,因為電腦只認識位址,多了翻譯這個過程,可以忽略不計,那種用的順手就用那種。

2樓:yzx浪子

不,反而是三維陣列比三維指標更快一些。

陣列在記憶體中將會連續地儲存在棧中。

首先讀取棧資料就比讀取堆資料快。

其次"連續地儲存"表示所有資料都連在一起,也就是說其實n維陣列都是1維陣列,編譯器會在編譯的時候就將下標計算出來,比如對於三維陣列int[4][5][6] a;,其實就是乙個有4*5*6=120個int的一維陣列,當我讀取a[1][2][3]時編譯器會計算出其下標為1*5*6+2*6+3=45,讀取時就會直接讀取a[45]

而讀取三維指標就要麻煩得多,對於三維指標int***a;,讀取a[1][2][3]時,所有資料都只能在執行時讀取,首先要讀取a[1]獲取到乙個二維指標int** p1;,然後再讀取p1[2]獲取到一位指標int* p2;,最後再讀取p2[3]才能獲取到需要的資料,也就是說實際上總共訪問了三次堆記憶體。

可見三維指標比三維陣列要更慢。

為什麼指標運算比陣列運算快得多

3樓:網友

陣列運算,一般是陣列首位址加上下標得到目的元素位置,則,訪問乙個資料元素,要經過乙個加法運算,會耗用一定的計算機時鐘週期來進行這樣的運算,這是額外的時間開銷。

用指標訪問資料時,指標變數一般是自加運算(++或者自減運算(--這兩種運算一般在cpu中有專門的單週期運算指令與其對應,效率要比做加法高得多,因此節省了操作及運算時間。

指標與陣列哪個效率高?

4樓:網友

指標和陣列的執行機制是相同的,都是按指標方式執行的,陣列在實際執行時先由編譯器轉換成指標解釋。嚴格來說,指標肯定比陣列效率高——高一點點,現代編譯器對此的優化使兩者幾乎完全看不出來,其實他們效率的差距本來就非常小。

5樓:網友

這三種 2和3是相同的 對編譯完後的程式是一樣的。

1和2是完全不同的 所以無法比較好壞。

6樓:車開往**

一樣,陣列名就是陣列的首位址。

7樓:網友

當然是指標 指標式c語言的精華。

求助~~c語言的三維陣列與指標!!!

8樓:練鵬堂和正

從罩梁a[1][0][1]開始連續取4個元素值(按殲掘位址從低到高)賦給bak,就是氏悶核a[1][0][1],a[1][0][2],a[1][0][3],a[1][0][4]這4個。

9樓:逢歌辛興騰

指標也可以指向陣列。p就是乙個指向一維陣列的指標,這個一維陣列的長度為9。二維陣列可段雀以理解握核早為由多氏猛個一維陣列組成。

str實際上是乙個指向一維陣列的指標常量。所以p=str就對了。

行指標與三維陣列問題

10樓:求學解惑

printf("%3d",*(p+i)+[j][k]))//這一行中 [j][k] 指什麼 編譯出錯。

應該改為:printf("%3d",*(p + i) +j) +k));

解釋:*(p + i) = s[i]; //此時 + i = i * 3 * 4

*p + i) +j) = s[i][j]; //些時 + j = j * 4;

*p + i) +j) +k) = s[i][j][k]; //些時 + k = k

綜合:*(p + i) +j) +k) = *(int*)p + i * 3 * 4 + j * 4 + k ) //好好體會吧。

建議:你對指標的運算知識還需要加強。

c語言 利用指標輸出三維陣列 問題

11樓:斂雋潭驪文

明確一下陣列唯陵的旁運概念比如:arr[2][3][4]123a 0...1...

b 0...1...2...

c 012301230123012301230123

你程式裡ptr1相當於運山樑上面圖中c的位置,沒問題。

你程式裡ptr2相當於上面圖中b的位置,需要i*j個。

你程式裡ptr3相當於上面圖中a的位置,需要i個。

具體的**,你自己再改改吧。

陣列快還是指標快?比如 int a[5]={2,3,3,3,3};int * p;p=a; 那麼*(p+3)與a[3]比較哪個更快嗎?解釋一下。

12樓:網友

*(p+3) 會多做一些的運算。

如果a在棧上那麼a[3]編譯器會優化成和普通變數一樣的訪問速度。

13樓:網友

是一樣快的,陣列在c++中的定位就是通過指標來的,就是說a[3]在計算機中執行的就是你的指標寫法。

14樓:網友

一樣快的,下標訪問方式[ ]編譯器將會解析成位址運算方式。

15樓:網友

指標相對快一些,因為下標符需要乙個翻譯過程,而指標是直接訪問的。

16樓:離火vs戰玄

編譯速度不一樣,執行期速度一樣,彙編指令相同。

c語言-指標-指向三維陣列

17樓:網友

int i,j,k;

char **m = (char***malloc(h* sizeof(char**)//定義動態三維陣列m

for(j=0; j}char *n;

n=(char *)malloc(sizeof(char )*h);

for(i=0;i<=h;i++)

n[i]=m[i][6][32];

為什麼沒有三維指標的疑問以及多維陣列的用處

18樓:折柳成萌

char a[先定義乙個三維陣列:

char b[2][3]=;假設這是乙個二維陣列。

char *c =

strcat(b,c);/把c和b相連線。

strcat(a,b);/a再和b連線。

最後a

c語言三維陣列三維陣列怎麼理解c語言

先說二維,可以這麼理解 int n 3 有3個int 那麼,int m 5 3 有5個int 3 賦值時 n 1 3把3給1號 m 4 m 4 是個int 3 型別,這麼賦值,也就是這麼賦值 m 4 的 0 是5 m 4 0 5 m 4 1 9 m 4 2 4 懂了嗎?三維甚至更多維大同小異,比如 ...

什麼叫三維動畫,三維動畫是什麼

想要系統的學習可以考慮報一個網路直播課,推薦cgwang的網路課。老師講得細,上完還可以回看,還有同型別錄播課可以免費學 贈送終身vip 自制能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭 王氏教育。王氏教育全國直營校區面授課程試聽 複製後面連結在瀏覽器也...

三維家比酷家樂好嗎,三維家和酷家樂比怎麼樣?

二者都是做效果圖 的軟體,也都可以進行vr全景體驗。不能單純的評價哪個優 專劣,要看使用者物件屬,三維家軟體操作簡單 上手快,試用一下基本就會了。採用雲渲染的技術,10秒鐘就可以出圖了呢,並且對電腦配置要求比較低,您可以嘗試一下哦。三維家和酷家樂比怎麼樣?現在這兩家bai家居軟體公du司可是資本的z...