指針訪問數組元素
兩者意思一樣,但是編譯器處理起來不見得一樣。就像樓上的例子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)後者所耗時間明顯增加很多,前者也有所增加,但比較少。編譯器優化不能用這個語句測試,因為整個會被優化掉。
❷ 「用指針引用數組元素」是什麼意思
就是說通過指針來訪問數組,例如有一個指針int *p和一個數組int a[4][2]。如果p=&a則有*p=a[0][0],*(p+1)=a[0][1],*(p+2)=a[1][0]。。。。指針就是一個地址,操作起來會比數組效率高,但是這也在無形中給使用者增加了難度。
❸ 如果指針指向一個數組,如何隨機訪問其指向的數組元素
舉個例子:
int is[10];
int *pi = is;
訪問數組中元素的三種方法:
is[i];// i<10
pi[i];
*(pi+i);
❹ 如何用數組指針訪問數組中的元素(C++)
數組在內存中的存儲數據就是從array[0]----->array[9]
不會存儲什麼array或者*array
array只是一個數組的名字,它不佔據存儲空間.但是它有值,它的值就是數組的首
地址值.
ptr[2]=array; ptr[2]為int 類型 array為指針 錯
*ptr=array; 相當於ptr[0]=array 錯誤
*ptr[3]=*array; 相當於 array[3]=array[0]; 對.
訪問:
for(i=0;i<10;i++)
{
printf("%d",*ptr++);
}
for(i=0;i<10;i++)
{
printf("%d",ptr[i]);
}
兩個都可以
❺ 指針數組中每個元素的訪問
指向數組的指針
就是數組指針
比如
int a[10];
int (*p)[10];
p=&a;
然後 訪問的時候
(*p)[i];
就是a[i];
一般用來指向二維數組。
❻ 為什麼要使用指針訪問數組元素
實際上就是講述另一種方法 讓你明白指針的用法 其實數組和指針沒有很大區別 比如一個數組a[10],我們可以用a[5]訪問其中的一個數據 同樣int *p=a 一樣可以用p[5]訪問這個數 而且a也可以代表這個數組的首地址 只不過不能增減
❼ C語言中為什麼要使用指針訪問數組元素
用指針有一些好處:可以再指針上直接進行計算
比如加減指針。
另外當數組作為
參數傳遞
到函數中的時候,用指針是很方便的。
其實數組的名字就是一個指針。
有一本經典的書
《
C專家編程
》
可以幫助理解這個問題。這種基礎問題是非常重要的。
❽ C語言用指針引用數組元素
(*p)[3]是定義一個指向一維數組的指針,數組元素為三。也就是說p指向的其實是a[0],a[1],a[2]這樣的形式。
p=a;其實就是把第0行的首地址賦值給p.
所以答案C中p[1]即是把第1行的首地址給p,在此基礎上向後移一位,取出地址中的元素數值。 *(p[1]+1)相當於a[1][1].所以是對的。
B的形式是對的,但是它相當於a[2][1],超出界限所以為錯。剩下的兩個格式就不對。
❾ 什麼用指針訪問數組元素求解。
你定義的整形數組,可以用指向整數的指針int *s,也可以用指向數組的指針int (*s)[3];
你的代碼有很多編譯都會出現的錯誤,比如int *s;少了空格和分號。
二維數組初始化也是錯的,你定義之後a[2][3]是取數組中第二組第三個的值。
s=a少了冒號,而且s是不能等於a的,因為你定義的是二維數組所以a相當於指向指針的指針。
用int *s的話應這樣寫s=a[0];
#include <stdio.h>
int main()
{ int a[2][3]={{1,2,3},
{4,5,6}};
int i;
int *s;
s=a[0];
for(i=0;i<6;i++)
printf("%d",s[i]);
return 0;
}
與二維數組接近的還是指向數組的指針int (*s)[3];
這可以寫成s=a;而s[1]就相當於a[1]了
代碼
#include <stdio.h>
int main()
{ int a[2][3]={{1,2,3},
{4,5,6}};
int i,j;
int (*s)[3];
s=a;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d",s[i][j]);
return 0;
}
希望你仔細看書,多看編譯器提示,多練習揣摩數組與指針的聯系。
❿ 怎麼用指針訪問數組元素
#include<stdio.h>
int main()
{ int i,a[10],*p=a;
for(i=0;i<10;i++)
scanf("%d",p+i);
for(i=0;i<10;i++)
printf("%d ",*(p+i));
return 0;
}