c語言指針數組例子,c語言指針數組與數組指針

本文目錄一覽:

論述C語言中指針的概念和作用,並舉例說明

1、指針概念:變數的地址(計算機內存位元組的編號)叫做指針,存放變數地址的變數叫指針變

量,

簡言之,指針是用來存放地址的。

2、作用:指向這個變數或數組的首地址,是變數的間接引用方式。其值如果改變,變數的值或數組元素的值也會跟著改變。程序對變數的操作實際上是對變數所在的存儲空間讀取和寫入數據。方便對變數的操作。

舉例說明:

int

a=3;/*定義一個整型變數a,並賦初值3*/

int

*p;/*定義一個指針變數P*/

p=a;/*讓p指向a的首地址,也就是a的地址*/

程序為a分配一個2個位元組的存儲單元,假如2個位元組的地址分別為(ABCD1和ABCD2,唯一),那麼p裡面放的值就是ABCD1,不是3。這時可通過p直接引用a,實際上*p=3。以後不管a存放在內存中的哪個地方,只用通過調用p就可以引用a。這時如果令*p=4,則最後的a值也為4。對於數組,指針是指向數組的首地址。

c語言的兩個指針例子?????

個人認為:

(1)printf(PF,a,*a,a[0],a[0],a[0][0]); //a、a[0]表示整個數組的起始地址,其他三個表示數組第0行的起始地址跟整個數組的起始地址相同

printf(PF,a+1,*(a+1),a[1],a[1],a[1][0]);//a+1、a[1]表示數組第1行的起始地址,其他三個表示數組第1行第0個數的地址跟數組第1行的起始地址相同

printf(PF,a+2,*(a+2),a[2],a[2],a[2][0]); //同上,第2行

printf(“%d,%d\n”,a[1]+1,*(a+1)+1); //a[1]+1與*(a+1)+1都表示數組第1行第1個數的地址

printf(“%d,%d\n”,*(a[1]+1),*(*(a+1)+1));//這二個指針都表示數組第1行第1個數的值

(2)b[10]是已經申請好的空間,不能改變其地址

C語言指針數組的作用

指針數組:數組成員是指針的數組。

作用:數組的屬性全有。因為成員是指針,這就可以延伸出很多內容。包括:

成員是函數指針,整個數組就是一類相關函數的集合,便於代碼架構的管理。

成員是鏈表指針啦,char指針,這種就是能做出類似散列表的結構。

總體來講,就是一組相關數據的指針的集合,達到的目的就是搜集指向相關數據的指針放到一個集合裡面。

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列的元素。

擴展資料:

數組的使用規則:

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函數逐個對數組元素賦值。

參考資料:

百度百科-數組

C語言 指針數組的使用

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

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

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

給你舉個例子

我現在輸出的是地址,是不是連續的?

用*運算符獲取地址的內容。

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

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

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

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][]

擴展資料:

與數組指針關係

數組指針是指向數組首元素的地址的指針,其本質為指針(這個指針存放的是數組首地址的地址,相當於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分配的空間則不一定連續。

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

舉例編輯

數組指針:

#includelt;stdio.hgt;

int main()

{

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

char(*p)[4];

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

for(i=0;ilt;=5;i++)

{

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

}

printf(“\n”);

for(i=5;igt;=0;i–)

{

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

}

return 0;

}

指針數組:

#includelt;stdio.hgt;

int main()

{

int i;

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

for(i=0;ilt;6;i++){

printf(“%s,”,pchlt;igt;);

}

printf(“\n”);

for(i=5;igt;=0;i–){

printf(“%s\n”,pchlt;igt;);

}

return 0;

}

參考資料:

百度百科——指針數組

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/295775.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-27 12:57
下一篇 2024-12-27 12:57

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 指針Python:為什麼Python中不需要使用指針?

    在Python中,指針的使用不像其他語言一樣那麼常見。這是因為Python有自己的內存管理方式,所以在大多數情況下,不需要顯式地使用指針。那麼,為什麼Python中不需要使用指針呢…

    編程 2025-04-29
  • Python去掉數組的中括弧

    在Python中,被中括弧包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括弧。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29

發表回復

登錄後才能評論