當前位置:首頁 » 編程語言 » c語言中指針數組

c語言中指針數組

發布時間: 2022-11-26 19:24:01

c語言數組指針

int (*pstu)[4];為指向有4個元素的數組的指針

int* getPosPerson(int pos, int (*pstu)[4]);為返回值為指針的函數

注意這是指針函數,而不是函數指針,後者為指向函數的指針變數,兩者含義是不同的

(類似指針數組和數組指針,兩者含義也是不同的,一個本質是數組,一個本質是指針)

調用該函數的語句為:ppos =getPosPerson(pos,scores);

傳入的scores表示3行4列的二維數組首行數組的地址,即&scores[0]

調用後相當於int (*pstu)[4]=scores,所以在getPosPerson中pstu與scores是等價的

即pstu可看作&scores[0],那麼pstu+pos也就等價於scores+pos,等價於&scores[pos]

即返回了指向&scores[pos](也就是scores第pos+1行的地址)的指針

返回該行指針ppos後,就可以查看該行表示的學生的4科成績了

② C語言中:數組指針與指針數組有什麼區別

數組指針是指向這個數組首地址的指針,指向對象是這個數組;
指針數組是存放一類指針的數組,這個數組的每個元素都是一個指針;
例子:
int
a[10];
int*
s;
s
=
a;//這里s就是一個數組指針,它的值就是數組a
的首地址;當然,如果a是一個整數,那s就是一個指向整型的指針;
int
a;
int*
s[5];
for(int
i=0;i<5;i++)s[i]=a;
//這里s就是一個指針數組,它的每個元素都是整型變數a的地址

③ C語言中指針和數組是怎樣相互轉換的

指針數組,就是一個數組里存放的都是指針,比如*p[8];p[0]里存放的就是一個指針數據
數組指針,數組名就是一個指向數組起始地址的指針,數組下標是縈引,比如num[0],他就相當於num+0;
num這個指針沒移動,於是取的是數組的第一個。num[1]相當於數組指針移1,於是指向數組第二個

④ c語言指針數組

因為定義char *a[]={"dfeeg","bfbdh","hfgbhd"};
那麼系統就分配3個連續內存單元來分別存儲3個字元串的首地址。
因為a是數組名,數組名就是數組的首地址,這里相當與a=&a[0]
而程序是需要把a[0]賦值給b。。 所以要b=*a;
如果是printf("%s\n",*b+c); 因為b是字元串dfeeg的首地址,
如果是*b的話,就變成了這個字元串的第一個字元d了!

⑤ C語言中,指針和數組的區別和聯系

指針就是一個裝地址的變數,數組是內存中的一個區域,而數組名是這個區域的首地址。也就是說你在定義指針的時候編譯器只分配了一個變數的空間(空間大小由內存地址長度決定),而定義數組的時候編譯器分配了一段區域的空間(空間大小由[
]裡面的數字和數組的類型決定)。使用上你可以把一個地址賦值給指針,但是不能賦值給數組名。你可以直接給數組裡面的變數賦值,這是安全的,因為內存已經申請好了,而給指針裡面裝個那個地址賦值就要小心了,因為指針裡面那個地址很可能會出錯。

⑥ C語言中 數組指針的意義

你說的是指向數組的指針如int(*)[]?
指向數組的指針有一種非常常見的用法,就是令其指向二維數組的某一行。如二維數組a[3][4],它的本質是一維數組的數組,即a本質上是一個3個元素的數組,其中的每個元素都是一個int[4]數組。要想使用一個指針p指向其中的某個元素,就必須將p定義為數組指針int (*p)[4],它指向一個int[4]數組。然後,才可以令p指向a:p=a。

⑦ c語言中,指針數組和行指針的區別是什麼

int(*p)[4],這個就是行指針
這種類型的指針p是指向一個一維數組,這個一維數組包含4個整形元素
但是 int a[4];p=a; 這種方式卻是不對的
因為p只能指向一個整型的一維數組,不能指向一個整型數據,a所指向的正是a[0],是個整型數;
實際上int(*p)[4]這種類型的指針是用於多維數組中的,比如定義一個二維數組int b[3][4],就可以這樣賦值p=&b[0],使p指向一維數組b[0],而且p的增減是以一維數組的長度為單位的,比如p+1指向的就是b[1]了

int *p[4]這個是指針數組了,首先弄明白這個是數組,裡面存放的是指針也就是地址,這個地址所指向的是一個整型數據,你可以把p[0],p[1]....當作一個個的指針變數來使用

我學的時候也弄了半天才搞明白,這是我總結的,你多看看指針那關於多維數組與指針的一節,做些練習自己驗證幾次就容易弄明白了

⑧ C語言中,如何定義一個『指針數組』,這個『指針數組』專門用來存放『數組指針』。

指針數組定義int*p[n];

[]優先順序高,先與p結合成為一個數組,再由int*說明這是一個整型指針數組,它有n個指針類型的數組元素。這里執行p+1時,則p指向下一個數組元素,

這樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指針變數可以用來存放變數地址。但可以這樣*p=a;這里*p表示指針數組第一個元素的值,a的首地址的值。

數組指針定義int(*p)[n];

()優先順序高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型數據的長度。

如要將二維數組賦給一指針,應這樣賦值:

int a[3][4];

int(*p)[4];//該語句是定義一個數組指針,指向含4個元素的一維數組。

p=a;//將該二維數組的首地址賦給p,也就是a[0]或&a[0][0]

p++;//該語句執行過後,也就是p=p+1;p跨過行a[0][]指向了行a[1][]

(8)c語言中指針數組擴展閱讀:

與數組指針關系

數組指針是指向數組首元素的地址的指針,其本質為指針(這個指針存放的是數組首地址的地址,相當於2級指針,這個指針不可移動);指針數組是數組元素為指針的數組,其本質為數組。

例如:*p[2]是指針數組,實質是一個數組,裡面的兩個元素都是指針,[]的優先順序比*的優先順序高,p先與[]結合,形成數組p[2],有兩個元素的數組,再與*結合,表示此數組是指針類型的,每個數組元素相當於一個指針變數

與二維數組對比

二維數組:如char string_1[10][10]只要定義了一個二維數組,無論賦不賦值,系統都會給他分配相應空間,而且該空間一定是連續的。其每個元素表示一個字元。我們可以通過指定下標對其元素進行修改。

指針數組:如char*str_B[5]系統至少會分配5個連續的空間用來存儲5個元素,表示str_B是一個5個元素的數組,每個元素是一個指向字元型數據的一個指針。

如果我做這樣的定義:

char a[3][8]={"gain","much","strong"};

char*n[3]={"gain","much","strong"};

他們在內存的存儲方式分別如右圖所示,可見,系統給數組a分配了

3×8的空間,而給n分配的空間則取決於具體字元串的長度。

此外,系統分配給a的空間是連續的,而給n分配的空間則不一定連續。

由此可見,相比於比二維字元數組,指針數組有明顯的優點:一是指針數組中每個元素所指的字元串不必限制在相同的字元長度;二是訪問指針數組中的一個元素是用指針間接進行的,效率比下標方式要高。但是二維字元數組卻可以通過下標很方便的修改某一元素的值,而指針數組卻無法這么做。

舉例編輯

數組指針:

#include&lt;stdio.h&gt;

int main()

{

char c[][4]={"哥","哥","我","岸","上","走"};//UTF-8:一個漢字=3個位元組

char(*p)[4];

int i;p=c;//將指針定位於c[0]

for(i=0;i&lt;=5;i++)

{

printf("%s,",*(p+i));//或者將*(p+i)替換成*p++

}

printf(" ");

for(i=5;i&gt;=0;i--)

{

printf("%s,",*(p+i));//或者將*(p+i)替換成*--p

}

return 0;

}

指針數組:

#include&lt;stdio.h&gt;

int main()

{

int i;

char*pch[6]={"妹","妹","你","坐","船","頭"};

for(i=0;i&lt;6;i++){

printf("%s,",pch&lt;i&gt;);

}

printf(" ");

for(i=5;i&gt;=0;i--){

printf("%s ",pch&lt;i&gt;);

}

return 0;

}

⑨ C語言中指針數組是什麼意思

指針數組就是指針的數組

舉個例子吧:

int *p[2];這個就是指針數組
數組一共有兩個元素,即為2個指針
就相當於
int *p1;
int *p2;

-------------
做個類比
int a[2];
這個是一個整型數組
相當於
int a;
int b;

一個意思

⑩ C語言 指針數組的使用

int**a可以表達一個二維數組。為什麼呢?

你可以這么理解*p[3]表達的是一個數組指針,這個指針p[0]表示的是數組存的第一個地址。而數組實際上是一串連續地址的塊。每一個小塊存著一個內容。每次訪問數組時,你為什麼可以用數組名+下標訪問呢?//比如a[i];

實際上就是訪問*a+i;*這個符號可以表示你存的是變數的地址。而數組地址的第一位為int類型變數存的地址(你可以直接使用數組的地址加上單位變數的空間的大小去訪問下個元素)。在這個程序中int*p[3]表示可以存三個int類型的地址。而p正好把二維數組的三個一維數組的開頭的int類型變數的地址給存起來了。

給你舉個例子

實際上p[i]與 *(p+i)是表達的是同一個意思。只不過只有數組可以定義一個連續的空間

(數組的第一個地址是隨機的其他的是連續的。)單獨用指針的話會隨機分配的

數組的指針可以存三個地址。當然可以訪問二維數組了。

熱點內容
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:431
動畫java 發布:2024-04-26 01:02:40 瀏覽:11
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:90
您的個人文件夾 發布:2024-04-26 00:03:12 瀏覽:67
睿雲伺服器功能介紹 發布:2024-04-25 23:59:51 瀏覽:570
標致5008怎麼連接安卓 發布:2024-04-25 23:25:08 瀏覽:793
安卓下載管理器哪個好 發布:2024-04-25 23:22:48 瀏覽:442
考試系統源碼php 發布:2024-04-25 23:09:46 瀏覽:136
磁碟禁止訪問 發布:2024-04-25 22:53:48 瀏覽:289
多線程ftp上傳 發布:2024-04-25 22:41:36 瀏覽:115