當前位置:首頁 » 密碼管理 » c指針訪問數組元素

c指針訪問數組元素

發布時間: 2023-04-04 11:23:07

c語言中用指針變數指向數組元素

main()
{int
a[10];
//定陵前義數組a為整型
int
*p=a,i;
//p指向尺弊清a的地址,即a[0]的卜晌地址
for(i=0;i<10;i++)
scanf("%d",&a[i]);
//給數組a賦值
printf("\n");
for(p-a;p<(a+10);p++)
//輸出數組元素
printf("%d",*p);
//p++表示p指向數組中下一個元素的地址
}
暫時先寫這么多,你一開始沒給p賦值是不對的~

㈡ c語言怎麼調用數組

c語言可以用數組元素的方法或指針的方法調用數組。
int a[100],i;
for(i=0;i<100;i++)
scanf("%d",&a[i]);
for(i=0;i<100;i++)
printf("%d ",a[i]);
也可以:
int a[100],*p;
for(p=a;p<a+100;p++)
scanf("%d",p);
for(p=a;p<a+100;p++)
printf("%d ",*p);

㈢ c語言中用指針和用下標訪問數組元素的本質區別

兩者意思一樣,但是編譯器處理起來不見得一樣。就像樓上的例子a[2]跟*(a+2)是一個意思。但是對於編譯器來說a[2]是一種固定的寫法,因此對於地址偏移什麼的有固定的處理方式,而*(a+2)在語法上應當分解為先算a+2再取值,如果編譯器不優化,完全按照這種定義去編譯的話,那麼就會有先算出a+2這個地址這一步,因此效率要低些。至於編譯優化能不能使兩者一致,那就很難說了。
比如我編了這樣一個程序
int
a[100];
int
b;
int
i,j,k;
for(i=0;i<1000000;i++){
for(j=0;j<100;j++){
for(k=0;k<100;k++){
b=a[0];
}
}
}
和把b=a[0]換成b=*(a)所耗時間一樣。而分別換成b=a[k]和b=*(a+k)後者所耗時間明顯增加很多,前者也有所增加,但比較少。編譯器優化不能用這個語句測試,因為整個會被優化掉。

㈣ c語言指針指向數組的問題。

首先你要明白一點,數組名和指針本質上是一回事,都是地址,該數組的首地址。知道這一點後就可以活學活用了。這是c語言的精髓。
比如你定義了int
*p,a[10];並且讓p=a;,
這個操作叫做指針p指向了數組a,其本質是給p這個變數付了一個值,就是數組a的地址,也是a[0]的地址,也是a本身裡面存儲的內容。
那麼要引用a[i],你可以有很多種寫法,比如*(a+i),
*(p+i),
p[i],都是等效的。
p++的含義其實不是p=p+1,至少有時不是,p++的操作其實是讓p指向下一個元素,也就是原來p指向的是a[0],那麼現在p指向a[1]了。由於a是int類型,站4個位元組,那麼p++這個操作其實是讓p的內容增加了4。不要問為什麼,c語言就是這么規定的。如果p指向的是一個char類型,那麼p++就使p的值增加1。

㈤ c語言指針引用數組元素,從p=a開始解釋下此程序

1. p=a; //使int*指針p指向數組a的首元素,即a[0]的地址—&a[0]。
2. 第一個for循環語句,就是通過指針p來對數組a的各個元素賦初值,*p的意思就是獲取指針p所指向的內存單元的值,初始就是對a[0]賦初值i,*p++=i,等價於:
*p=i; //對p指向的當前數組元素賦值,等價於a[i]=i;
p++; //指針p自增1,使指針p指向下一個數組元素
當初始化數組a完成後,
3. p=a; //使指針p重新指向數組a的首元素,即指向a[0]。
4. 第二個for循環,就是通過指針p輸出數組a的所有元素到屏幕上了。
總結,通過指針來操作對象,是一種間接訪問變數的方式,有很多的好處,這在以後的編程學習中你會慢慢體會到指針的妙處和精髓。

㈥ 在C語言中,用下標如何訪問數組元素

.以下標引用的方式訪問數組

在使用數組的場合中,我們常見的一種訪問方法是使用下標訪問數組元素,如:array[2] = 1,此語句是將該數組的第三個元素賦值為1.[ ]符號中的數字可以認為是在數組基地址上的偏移量,可以通過改變這個偏移量來訪問整個數組。

2.以指針訪問的方式訪問數組

除了使用偏移量的方法,我們還可以使用指針的方法來訪問數組,即間接引用的方式。如:*(array+2) = 1,同上面的代碼一樣,也是對該數組的第三個元素進行賦值。

3.下標引用和指針訪問的執行效率問題

對於這兩灶螞種不同的訪問數組的方式,它們的執行效率也不同,在這里先給出結論:指針訪問的效率 >= 下標引用的效率。接下來我們來說說,為什麼使用指針進行間接訪問的效率會優於小標引用的效率。

下標引用的效率

現在假設有如下代碼,執行對整個數組的初始化過程:

int array[10];

for(int i = 0;i < 10;i++)

{

array[i] = 0;

}

在這里我們還是假設編譯器中int類型佔4個位元組,在執行array[i] = 0時,編譯器會將其轉化為類似*(array + (i*4)) = 0形式。在整個執行10次的循環中,意味著也進行了10次乘法運算操作和10次加法運算操作。李腔

指針訪問的效率

假設有如下代碼,執行對整個數組的初始化過程:

int array[10];

for(int *ptr = array; ptr < array+10; ptr++)

{

*ptr = 0;

}

這里是將指針一開始指向數組首地址,然後每次向後移動一個數組元素,這里是每次移動4個位元組,即每次對指針地址+4。在整個過程中只進行了10次加法運算。同上對比可得,對於數組操作來說,指針訪問的效率是優於下標引用的。

4.下標引用和指針訪問的優先順序問題

關於這個問題,筆者還是先給出結論,再舉例進行闡述。

結論:下標引用優先順序 > 指針訪問優先順序。

假設我們現在有以下兩隱擾埋個數組的聲明:

int *array1[10];

int (*array2)[10];

關於上述聲明,乍一看很容易混淆,但其實這只是一個關於結合優先順序的問題。在看這些聲明時,需要記住下標優先順序高於指針*,並且如果出現了( ),那麼它的優先順序一定是最高的。

int *array1[10]

在*和[ ]同時出現的時候,我們先結合優先順序高的[ ]來看,即它先聲明了一個含有10個元素的數組array1,然後將剩下的int *組合,可以知道這個數組裡面的每個元素,都是一個指向整型類型的指針變數。也就是說,這是一個含有10個指針變數的指針數組。

int (*array2)[10]

這里的聲明中出現了( ),由於( )的優先順序最高,所以我們先看(*array2),即array2是一個指向某種類型的指針變數。再結合剩下的int [10],可以知道這個指針變數指向的數據類型是含有10個元素的整型數組。也就是說,這是一個數組指針,指向一個10元素整型數組。

㈦ C語言 通過指針變數p訪問數組元素array[i][j]的格式: *(p+(i*每行列數+j)

*(p+(i*每行列數+j))就是 array[i][j];
假設梁衡裂定義array時的長度為[10][20];
則每行列數就是20.
p=&array[0][0];的時候。
*(p+x)就是數組array中第x個字橡閉節。
x=i*20+j;
對應的攔缺array[1][2] 等效於 *(p+(1*20+2)) 或 *(p+22)

㈧ c語言中如何用指針指向二維數組中的某個元素

二維數組名a是一個指向指針的指針。也是一個指針數組名,它含3個元素,a[0]a[1],a[2]。雖然a存儲的地址是該數組首元素的地址,但它指向的並不是一個變數,而是一個指針。應為a是一個指向指針拆槐的指針,它指向的是和自己存儲的地址相同的指針,即a[0],a[0]是第一行一維數組的指針,可以指向具體變數。
這下明白了吧,*(a+0)它不是變數,她是中御慎賣敬指針,a指向a[0],*(a+0)就是a[0].

㈨ c語言使用指針p,訪問數組a[5]={1,2,3,4,5}的值。

1.代碼如虧旅下:

#include<stdio.h>

intmain(){
inta[5]={1,2,3,4,5};
int*p=a;

printf("訪問數組a的值: ");
for(inti=0;i<5;i++)
printf("%d ",*p++);

拆空行getchar();
旅嘩return0;
}

2.運行結果如下:


希望對你有幫助~

㈩ C語言中為什麼要使用指針訪問數組元素

用指針有一些好處:可以再悶頌指針上直接進行計算 比如加減指針。
另外當數組作為參數傳遞到函數中的時候,用指針是很方便的。
其實數組的名字就是一個指針。游拍
有一本經典的書 《C專家螞磨鄭編程》 可以幫助理解這個問題。這種基礎問題是非常重要的。

熱點內容
關閉androidstudio 發布:2025-02-14 03:53:42 瀏覽:18
安卓腳本一鍵打板 發布:2025-02-14 03:50:16 瀏覽:866
我的世界租賃伺服器會被封ip嗎 發布:2025-02-14 03:46:05 瀏覽:982
資料庫附 發布:2025-02-14 03:44:43 瀏覽:837
安卓系統解不了鎖怎麼辦 發布:2025-02-14 03:44:35 瀏覽:552
怎麼查詢信用卡密碼 發布:2025-02-14 03:42:04 瀏覽:318
studio外貿服裝直播腳本 發布:2025-02-14 03:34:16 瀏覽:453
python集合運算符 發布:2025-02-14 03:06:18 瀏覽:205
pic編譯軟體 發布:2025-02-14 03:01:04 瀏覽:984
反編譯在編譯 發布:2025-02-14 02:55:36 瀏覽:418