當前位置:首頁 » 編程語言 » c語言指向二維數組的指針

c語言指向二維數組的指針

發布時間: 2023-08-13 01:54:45

『壹』 c語言二維數組指針變數是什麼,int (*p)[2]什麼意思

二維數組指針變數形式如下:
類型名
(*數組名)[數組行數][數組列數]
如:int
(*p)[2][3];
//
定義一個int類型的二維數組指針變數,數組中每個元素都是一個指針
int
(*p)[2]表示定義一個數組指針,只是是一個一維的數組指針,數組中每個元素(共2個元素)都是一個int類型的指針變數,指針指向的地址就需要後續程序給出,不然會變為野指針。

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

在C語言中,可以通過如下方式來定義指向字元型二維數組的指針:
char c[4][5]; // 定義一個4行5列的字元型二維數組
char (*pc)[5]; // 定義一個含5個元素的數組指針
pc=c; // 將數組指針pc指向二維字元數組c
註:
char
(*pc)[5]
不能寫為 char
*pc[5]
char
(*pc)[5]
表示數組指針,數組中每個元素為char型;
char
*pc[5]
表示指針數組,數組中每個元素為char*,也即每個元素為指針。

『叄』 C語言指向二維數組的指針

一、你的 float score 數組定義的是:一個3行、4列的二維浮點數組,數組的元素為浮點數。如果你換個格式書寫就清晰了!
float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}};
在調用的過程中,score 就是這個數組的首地址,指向的是浮點數組{65,67,70,60,}。score + 1 指向的是數組{80,87,90,81,}。
二、你的 float *p 定義的是:一個指向浮點數的指針。這個是一維的。
在調用的過程中,float 指向的是 xx。一個浮點數字。
兩個的定義不同,所以參數傳遞過程中會出錯。
三、你的 float (*p)[4] 定義的是:一個指向含有四個元素的浮點數組的指針。
在調用的過程中,float 指向的是{xxx,xx,xx,xx,},由四個浮點數組成的數組。
這時兩個定義相同,所以參數傳遞過程中沒有錯誤。
四、有個建議,你的程序書寫格式不清晰,不利於你糾錯和修改,應該盡量的清晰、明確,不建議使用簡化方式定義參數。
作為一個軟體工作者,應該盡量使程序流暢、格式清晰、易讀,這是一個軟體工作者最基本的職業素養。
格式化後,程序如下,會清晰很多:
#include<stdio.h>
void main()
{
void search (float (*p)[4],int n);/*這里的 float *p 好像有問題*/
float score[3][4]={{65,67,70,60,},{80,87,90,81,},{90,99,100,98}};
search(score,2);
}
void search(float (*p)[4],int n)/*這里的 float *p 好像有問題*/
{
int i;
printf("the score of No.%d are:\n",n);
for(i=0;i<4;i++)
{
printf("%5.2f",*(*(p+n)+i));
}
printf("\n");
}

『肆』 C語言怎麼用指針代替二維數組

1.設p是指向二維數組a[m][n]的指針變數,則有:

int* p=a[0];//此時P是指向一維數組的指針。P++後,p指向 a[0][1]。

2.如果定義int (*p1)[n];p1=a;p1++後,p1指向a[1][0];

則p+j將指向a[0]數組中的元素a[0][j]。

由於a[0]、a[1]┅a[M-1]等各個行數組依次連續存儲,則對於a數組中的任一元素a[i][j],指針的一般形式如下:

p+i*N+j,相應的如果用p1來表示,則為*(p1+i)+j。

元素a[i][j]相應的指針表示為:

*( p+i*N+j),相應的如果用p1來表示,則為*(*(p1+i)+j)。

同樣,a[i][j]也可使用指針下標法表示,如p[i*N+j]。

若有:

int *p=a[0];

則數組a的元素a[1][2]對應的指針為:p+1*4+2

元素a[1][2]也就可以表示為:*( p+1*4+2)

用下標表示法,a[1][2]表示為:p[1*4+2]

(4)c語言指向二維數組的指針擴展閱讀:

指針與數組的關系:

1.指針數組:就是一個由指針組成的數組,那個數組的各個元素都是指針,指向某個內存地址。char *p[10]; //p是一個指針數組

2.數組指針:數組名本身就是一個指針,指向數組的首地址。注意這是一個常數。

example:

char (*p)[10]; //p是一個數組指針

3.函數指針:本身是一個指針,指向一個函數入口地址,通過該指針可調用其指向的函數,使用函數指針可實現回調函數。

網路-指針

『伍』 c語言裡面怎麼用指針表示二維字元數組

二維數組就是數組的數組,二維數組即數組的元素是一維數組的數組。那麼我們要用指針指向二維數組,就是要定義一個指向數組的指針了。例如:

charstr[3][10];//定義了一個char型的二維數組
char(*pstr)[10];//定義了一個指向char型的數組指針
pstr=str;//指針指向二維數組str

下面用pstr這個指針對二維數組進行賦值操作

inti;
for(i=0;i<3;i++)
scanf("%s",*(p+i));//*(p+i)等價於str[i]

『陸』 C語言中二維數組行指針是什麼

先從存儲的角度對二維數組作一個全面的了解。二維數組在內存中的存儲,是按照先行後列依次存放的。從內存的角度看,可以這樣說,二維數組其實就是一個一維數組,在內存中沒有二維的概念。如果把二維數組的每一行看成一個整體,即看成一個數組中的一個元素,那麼整個二維數組就是一個一維數組,它以每一行作為它的元素,這個應該很好理解。
第一,來詳細介紹二維數組與指針的關系。-
首先定義個二維數組 array[3][4],p 為指向數組的指針。
若p=array[0],此時p指向的是二維數組第一行的首地址,則 p+i 將指向array[0]數組中的元素array[0][i]。由以上所介紹的二維數組在內存中的存儲方式可知,對數組中的任一元素array[i][j] ,其指針的形式為:p+i*N+j (N為每一行的長度)。 元素相應的指針表示法為:*(p+i*N+j) ,下標表示法為:p[i*N+j] 。
For Example:
array[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int * p=array[0];
數組array有四個元素,分別為array[0],array[1],array[2],array[3],每個元素為包含3個元素的一維數組,
如array[0]的3個元素為 array[0][0],array[0][1],array[0][2]。
元素array[2][2]對應指針為:array+2*3+2,
指針表示法為:*(array+2*3+2) ,
下標表示法為:array[2*3+2] 。
特別注意:雖然 array[0] 與 array 都是數組首地址,但兩者指向的對象不同,這點要非常明確。array[0] 是一維數組的名字,它指向的是一維數組array[0]的首地址,所以 *array[0]與array[0][0]為同個值。而 array 是二維數組的名字,它指向的是所屬元素的首地址,其每個元素為一個行數組。它是以『行』來作為指針移動單位的,如array+i 指向的是第 i 行。對 array 進行 * 運算,得到的是一維數組 array[0] 的首地址,所以 *array 與 array[0] 為同個值。如果定義 int* p,p為指int類型的指針,指向int 類型,而不是地址。故以下操作 :p=array[0] (正確) ,p=array (錯誤) 。這點要非常注意。
第二,看看如何用數組名作地址表示其中元素。
對二維數組array ,array[0] 由 array指向,故*array 與array[0] 是相同的,依次類推可得 array[i] 由array+i 指向,*(array+i) 與array[i]是相同的。 因此,對於數組元素 array[i][j] ,用數組名表示為 *(*(array+i)+j) ,指向該元素的指針為 *(array+i)+j 。
注意:數組名雖然是地址,但與指向數組的指針性質不同。指針變數可以隨時改變其所指向對象,而數組名不可以,一旦被定義,就不能通過賦值使其指向另外一個數組,但是在Java中則可以。
第三,順便了解一下不太常用的『行數組指針』。
對於二維數組array[4][3],與int* p 。二維數組名array 不能直接賦值給p。原因前面已講過,兩只的對象性質不同。 在C語言中,可以通過定義一個行數組指針,使得這個指針與二維數組名具有同樣的性質,實現它們之間可以直接賦值。行數組指針定義如下:
int (*p)[3]; 它表示,數組 *p 具有三個int類型元素,分別為 (*p)[0] , (*p)[1] , (*p)[2] ,即 p指向的是具有三個int類型的一維數組,也就是說,p為行指針。此時,以下運算 p=array 是正確的。
第四,二維數組作為函數參數。
二維數組作為函數參數一般有兩種方式:(1) void func(int **array){...} (2) void func(int array[ ][N])
注意第二種方式一定要指明二維數組的列數
當二維數組名作為函數實參時,對應的形參必須是一個行指針變數。
和一維數組一樣,數組名傳送給變數的是一個地址值,因此,對應的形參也必須是一個類型相同的指針變數,在函數中引用的將是主函數中的數組元素,系統只為形參開辟一個存放地址的存儲單元,而不可能在調用函數時為形參開辟一系列存放數組的存儲單元。
int main()
double a[3][4];
……
fun(a);
……
fun(double (*a)[n])
……

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

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

熱點內容
h6二代有哪些隱藏配置 發布:2025-02-06 04:11:09 瀏覽:606
c語言中的void是什麼意思 發布:2025-02-06 04:05:26 瀏覽:233
加密狗是啥 發布:2025-02-06 03:48:03 瀏覽:556
phpcopy文件 發布:2025-02-06 03:41:26 瀏覽:412
系統配置頁面怎麼設置 發布:2025-02-06 03:36:34 瀏覽:699
家庭電腦搭建流媒體伺服器 發布:2025-02-06 03:19:02 瀏覽:346
matlab稀疏矩陣存儲 發布:2025-02-06 03:07:54 瀏覽:840
國際服2b2t伺服器地址 發布:2025-02-06 03:06:28 瀏覽:392
c語言輸出b 發布:2025-02-06 03:06:27 瀏覽:33
普通火車wifi密碼多少 發布:2025-02-06 03:04:20 瀏覽:438