這篇文章給大家聊聊關于指向結構體數組的指針,以及結構體中的指針怎么使用對應的知識點,希望對各位有所幫助,不要忘了收藏本站哦。
數組指針的語法形式
數組指針,指的是數組名的指針,即數組首元素地址的指針。即是指向數組的指針。例:int(*p)[10];p即為指向數組的指針,又稱數組指針。
指向整型數組的指針如何用
數組指針(也稱行指針)
定義int(*p)[10];
()優先級高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是10,也可以說是p的步長。也就是說執行p+1時,p要跨過10個整型數據的長度。
例:int(*p)[4];//該語句是定義一個數組指針,指向含4個元素的一維數組。所以數組指針也稱指向一維數組的指針,亦稱行指針。
指針數組
定義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[3];inta[3][4];p++;//該語句表示p數組指向下一個數組元素。注:此數組每一個元素都是一個指針for(i=0;i<3;i++)p[i]=a[i]這里int*p[3]表示一個一維數組內存放著三個指針變量,分別是p[0]、p[1]、p[2]所以要分別賦值。這樣兩者的區別就豁然開朗了,數組指針只是一個指針變量,似乎是C語言里專門用來指向二維數組的,它占有內存中一個指針的存儲空間。指針數組是多個指針變量,以數組形式存在內存當中,占有多個指針的存儲空間。
C語言30天核心突破
指向數組元素的指針只能指向數組的首元素
汗,可以指向數組的任意位置,通過數組名+偏移
區分數組指針和指針數組
區別是:數組指針是一個指針,指針指向一個數組,在32位系統中占4個字節,而數組所占字節的大小還需要進一步判定。指針數組是一個數組,數組中存儲是指針,其在編輯器中所占的內存有多少字節由數組本身決定;
c語言指針數組的用法
一維數組指針
一維數組的指針是直接將一維數組的首地址賦予指針變量,之后通過指針變量的運算逐漸輸出一維數組中的各個元素的值。
例如:inta[20];
int*p;
因為數組名相當于一個指針指向的就是一維數組的首地址(例如a[0]),所以可以直接將數組名賦予指針變量(例如p=a),無需加取地址符&;也可以讓指針變量指向第一個元素的地址(例如p=&a[0]);即p=a與p=&a[0]是等價的,(應當要注意的是:p=a是將數組首元素的地址賦給指針變量,而非將數組a的各元素的值賦給指針變量)
如果一個指針變量p已經指向數組中的一個元素,則p+1指向數組中的下一個元素,p-1指向的是數組中的上一個元素。(注意:執行P+1或P-1時,并不是將P的值簡單的加1,而是加上一個數組元素所占用的字節數,例如:float型,每個元素占4個字節,所以p+1意味著使p的地址加4個字節,以便讓其指向下一個元素)
這里的a+i與p+i是等價的,也可以用數組名進行運算;
e
*(a+i)==*(p+i);
二維數組指針
令inta[2][3]={{1,2,3},{4,5,6}}
在二維數組中數組名指向數組的首元素,但是不是簡單的表示一個簡單的元素,而是由多個元素所組成的一維數組,因此數組名指的是二維數組首行(即下標為0的那一行)的首地址,a+1即表示下標為1的那一行元素,又因為數組名代表首元素的地址,所以a即代表二維數組中a[0][0]的值,a+1即a[1][0]的值。a[0]等價于*(a+0),a[1]等價于*(a+1),(a+1)+1的值即&a[1][1]。要想得到a[1][1]的值,就要再進行取值,即(a[1]+1)或*((a+1)+1)為a[1][1]的值。(注意:(a+i)與a[i]是等價的)
切記二維數組名是指向二維數組首行,而非指向二維數組a[0][0];
二維數組在指向行的指針前加*,就轉化為了指向列的指針,反之,在二維數組指向列的指針前加&,就轉化為了指向行的指針.(例如:&a[i]或a+i指向行.而a[i]或*(a+i)則指向列)
在定義時的int(*p)[4]的意思是指針變量p指向包含四個整型元素的一維數組,即在二維數組中一共有四行元素
數組和指針之間有什么關系
1、指針:系統為某一個變量開辟單元格,指針便指向此單元格的變量值。
2、數組:系統為某一組數開辟一組單元格,數組首地址便是你定義的數組變量名。
數組和指針的唯一區別是,不能改變數組名稱指向的地址。
對于數組來說,數組的首地址,也可以用指針來表示操作,如:
inta[10];
int*p,n;
p=a;
對第一個元素取值,可以用幾種方法:
n=a[0];
n=*p;
n=p[0];
n=*(p+0);
但是以下語句則是非法的:
readings=totals;//非法!不能改變readingstotals=dptr;//非法!不能改變totals
數組名稱是指針常量。不能讓它們指向除了它們所代表的數組之外的任何東西。
擴展資料
下面的程序定義了一個double數組和一個double指針,該指針分配了數組的起始地址。隨后,不僅指針符號可以與數組名稱一起使用,而且下標符號也可以與指針一起使用。
intmain()
{
constintNUM_COINS=5;
doublecoins[NUM_COINS]={0.05,0.1,0.25,0.5,1.0};
double*doublePtr;//Pointertoadouble
//AssigntheaddressofthecoinsarraytodoublePtr
doublePtr=coins;
//Displaythecontentsofthecoinsarray
//Usesubscriptswiththepointer!
cout<<setprecision(2);
cout<<"Herearethevaluesinthecoinsarray:\n";
for(intcount=0;count<NUM_COINS;count++)
cout<<doublePtr[count]<<"";
//Displaythecontentsofthecoinsarrayagain,butthistimeusepointernotationwiththearrayname!
cout<<"\nAndheretheyareagain:\n";
for(intcount=0;count<NUM_COINS;count++)
cout<<*(coins+count)<<"";
cout<<endl;
return0;
}
程序輸出結果:
Herearethevaluesinthecoinsarray:0.050.10.250.51Andheretheyareagain:0.050.10.250.51
當一個數組的地址分配給一個指針時,就不需要地址運算符了。由于數組的名稱已經是一個地址,所以使用&運算符是不正確的。但是,可以使用地址運算符來獲取數組中單個元素的地址。
關于本次指向結構體數組的指針和結構體中的指針怎么使用的問題分享到這里就結束了,如果解決了您的問題,我們非常高興。