當前位置:首頁 » 密碼管理 » 二維數組指針訪問

二維數組指針訪問

發布時間: 2022-05-18 04:12:51

c語言中如何通過二級指針來操作二維數組

1、首先我們打開電腦里的C語言軟體,新建一個工程和.c文件,輸入頭文件和主函數。

② 實例分析用指針訪問二維數組的幾種方法

之前對數組的概念一直沒有理解透徹,只覺得數組名就是個常量指針而已,用法和基本的指針差不多。所以當我嘗試用二級指針去訪問二維數組時,就經常會出錯。下面就是剛開始寫的一個錯誤的程序: #include <stdio.h intmain(){intiArray[2][3] = {{1,2,3 },{4,5,6}};int**pArray = NULL; pArray = iArray;printf("array[0][0] = %d\n" , pArray[0][0]);printf("array[1][2] = %d\n" , pArray[1][2]);return0;}開始的時候我是這樣分析的:本來數組和指針就差不多,一維數組和一維指針對應,那麼二維數組名應該和二維指針差不多,所以上面那個程序是沒有錯的,應該列印出的是1和6。但是當我實際編譯運行的時候,卻出現了段錯誤,也就是我訪問了不該訪問的地址空間。那錯誤到底出在什麼地方呢?正確的程序應該怎麼寫呢? 為了解決問題,不得不讓我重新理解數組的含義。仔細翻閱一些書籍後,我發現其實數組並不是我原來想像的那麼簡單:一個常量指針標識的一群變數的集合。數組應該也算是一個完備的變數類型:有名字,有大小,也有地址。只不多就是名字和它的地址一樣罷了。也正是因為數組有大小,所以當用sizeof對數組名進行運算時,算出來的是實際數組的大小,而不是指針的大小。 也正是因為這樣,所以指向數組的指針和指向指針的指針也大不一樣。它們倆最明顯的不同就是表現在指針步進的時候。我們知道指針在進行++運算的時候,跨越的實際地址取決於指針指向的數據類型:對於一般的32位機來說,假如指向的是int型數據,跨越的實際地址就是4,指向的是指針型數據,跨越的實際地址也是4,當指向的是數組類型的時候,跨越的實際地址就是數組的長度了。 現在再回頭分析上面那個錯誤程序,根據下標引用符號[]的運算規則,我們知道pArray[0][0]其實就是**pArray,而iArray實際上只是個數組變數名,而它的值就是整個數組的開始地址(其實&iArray,iArray,iArray[0]以及&iArray的值都是數組的開始地址,都是在編譯過程中編譯器賦予的值)。那麼其實*pArray就已經是iArray[0][0]的值了,也就是1,而**pArray則是去訪問地址為1的地址空間中的數據,自然會出段錯誤。 其實用指針訪問二維數組可以直接用一級指針就可以了。比如下面這個程序:intmain(){intiArray[2][3] = {{1,2,3 },{4,5,6}};int*pArray = NULL; pArray = iArray;printf("array[0][0] = %d\n" , *pArray);printf("array[1][2] = %d\n" , *(pArray +1*3+2));return0;}因為數組本身在地址空間中就是連續排列的,根據行數和列數,我們自己計算出訪問單元的地址偏移量就可以用一級指針輕松遍歷二維數組中的所有數據了。 我們還可以嘗試用指向數組的指針來訪問二維數組的成員。下面就是事常式序:intmain(){intiArray[2][3] = {{1,2,3 },{4,5,6}};int(*pArray)[3] = NULL;pArray = iArray;printf("array[0][0] = %d\n" , pArray[0][0]);printf("array[1][2] = %d\n" , pArray[1][2]);return0;}簡單分析一下這個程序:我們知道[]運算符的結合方向是由左向右,pArray[1][2]就等價於(* (pArray + 1))[2],而由於pArray是數組指針,而且數組的長度為3,所以* (pArray + 1)就表示iArray[1]這個數組,則pArray[1][2]則就完全等價於iArray[1][2]。 如果非得想用二級指針來訪問二維數組的話,我們還得借用指針數組(數組內存儲的都是指針類型的數據),下面是事常式序:intmain(){intiArray[2][3] = {{1,2,3 },{4,5,6}};int*ipArray[2] = {iArray[0 ], iArray[1]};int**pArray = NULL; pArray = ipArray;printf("array[0][0] = %d\n" , pArray[1][2]);return0;}由於二級指針要跳兩次,所以中間還需要額外的存儲一級指針的空間。所以一般不建議用二級指針去訪問二維數組。

③ 怎樣通過指針變數訪問二維數組的下標變數

可以用指向數組的指針來訪問二維數組的下標變數。下面就是事常式序:

intmain()
{
intiArray[2][3]={{1,2,3},{4,5,6}};
int(*pArray)[3]=NULL;
pArray=iArray;

printf("array[0][0]=%d ",pArray[0][0]);
printf("array[1][2]=%d ",pArray[1][2]);

return0;
}

④ 用指向數組元素的指針訪問二維數組

通過
二級指針
去訪問
二維數組
需要先給二級指針分配等同於二維數組行數的一維
數組指針
,然後把二維數組的每行首地址賦值給對應位置的一維指針上。之後就可以通過二維指針直接訪問了。

⑤ 二維數組指針怎麼訪問 比如一維的*a表示訪問數組a的第一字元。

同理,**a,即*(*(a+0)+0),即a[0][0]

⑥ C語言如何定義指針指向字元型二維數組

使用指針變數訪問二維數組的任意一個元素的方法:

1.使用列指針:定義一個列指針p,讓它指向二維數組的第0個元素

int a[3][4];

int *p;

p=&a[0][0];

//因為a[0]是第0行的數組名,所以p=&a[0][0]相當於p=a[0],因為a[i][j]前面共有i*4+j個元素

該二維數組的任意i行j列元素可表示為*(p+i*4+j)。

2.使用行指針:定義一個行指針p,讓它指向二維數組的第0行

int a[3][4];

int (*p)[4];

p=a; //也可以為p=&a[0];

其中* ( *(p+i)+j)表示任意一個i行j列的元素。

(6)二維數組指針訪問擴展閱讀:

數組的使用規則:

1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。

2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。

3.如不給可初始化的數組賦初值,則全部元素均為0值。

4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。

網路-數組

⑦ 二維數組如何用指針表示

二維數組用指針表示有兩種方式:

一、動態數組方式。

完全由動態數據構成二維數組。如M行N列的數組,先分配M個一維指針空間,然後在每個一維指針上分配N個元素的空間,即成為動態二維數組。

和普通數組不同,這種動態二維數組的各行之間地址並不連續。

參考代碼:

#include<stdlib.h>
int**create(intm,intn)//創建m行n列的二維數組。
{
int**r;
inti;
r=(int**)malloc(sizeof(int*)*m);//分配m個int*指針內存。
for(i=0;i<m;i++)//遍歷每行
r[i]=(int*)malloc(sizeof(int)*n);//每行分配n個int型元素。
returnr;//返回地址值。
}

二、通過數組指針指向已有二維數組。

對於已經定義好的M行N列數組,可以使用指向N個元素的數組指針,指向該數組並訪問。

參考代碼:

inta[10][5];
int(*p)[5];//每行5個元素的數組指針。
p=a;//把p指向a。

⑧ 指針指向二維數組的幾種方法

二維數組乃至多位數組本質就是順序表,所以用只要指向首元素的指針就可以了。
另外就是使用數組指針,要注意語法聲明。

⑨ 如何在c語言二維數組中使用指針

程序中有些問題:
1、函數的定義有錯誤(參數格式不對);
2、程序中沒有調用函數(或者說是調用格式有誤)
3、函數中的處理邏輯需要修改(一步一步來,這樣容易處理和理解)。
你定義的函數是使用數組作為參數的,數組名本身就是個地址(相當於指針)。
下面在手機上用易歷知食軟體里的微C程序設計來演示修正後的代碼並運行程序,供參考。
手機上修正後的代碼如下圖:
手機上運行的效果如下圖所示:

⑩ 關於指針指向二維數組

表示一個指向二維數組的指針變數
------------------
這東西說的不完整.跟二維數組有關的知識,只有數組指針和行指針這兩種.如果是單個指針變數,那麼和一維數組有關.絕對扯不到二維數組.
實參是一維數組,形參是指針.
實參是二維數組,形參是行指針.
實參是數組指針,形參是指向指針的指針.

熱點內容
每秒上億次訪問伺服器怎麼處理 發布:2025-05-20 14:10:07 瀏覽:314
按鍵精靈資料庫操作 發布:2025-05-20 14:08:33 瀏覽:592
360瀏覽器無法訪問網路 發布:2025-05-20 14:05:13 瀏覽:834
存儲伺服器地址錯誤 發布:2025-05-20 14:01:46 瀏覽:912
資料庫優先 發布:2025-05-20 13:59:39 瀏覽:278
androidurl判斷 發布:2025-05-20 13:50:11 瀏覽:259
共享文件夾沒有啟動伺服器服務 發布:2025-05-20 13:43:38 瀏覽:804
天龍八部游戲怎麼切換伺服器 發布:2025-05-20 13:42:36 瀏覽:631
亞馬遜免費主機是什麼配置 發布:2025-05-20 13:40:10 瀏覽:696
存儲類型默認分配 發布:2025-05-20 13:32:26 瀏覽:663