初識指標——1
阿新 • • 發佈:2018-12-20
① *p++ <=> *(p++)
先引用p的值,實現*p的運算,然後再使p自增1
②還有*(++p):先使p加1,再取*p。
③++(*p):表示p所指向的值加1。
④*(p--):先對p進行“*”運算,再使p自減
a[0]+1 <=> *(a+0)+1 都是&a[0][1]。 如若把*(a+1)+2寫成*(a+1+2),後者變成*(a+3),相當於a[3]。 *(a[i]+j)與*(*(a+i)+j)是a[i][j]的值。 如果a是二維陣列,則a[i]是一維陣列名,他只是一個地址。 a+i,*(a+i),a[i]+j,*(a+i)+j都是地址 。
一個二維陣列,a[0]是一維陣列名,是一維陣列中起始元素的地址,基型別:整形資料
a是二維陣列名,是二維陣列的首行起始地址,基型別:一維陣列
二者的純地址相同
若用一個指標變數pt來指向此一維陣列:
```
int (*pt)[4];
```
-
一維陣列名指向列元素。 在指向行的指標前面加一個*,就轉換為指向列的指標; 在指向列的指標前面加一個&,就成為指向行的指標; &a[0] <=> & *a <=> a;
int a[2][3]={1,2,3,4,5,6}; int (*p)[3]; p=a;
int a[3]={1,2,3};
int (*p)[3];
p=&a;
在第一個程式碼中,p是一個行指標,基型別是一維整形陣列,(p+2)就轉換為列指標,(*(p+2)+3)就是a[2][3]的值。
- 可變格式輸出函式
char *format;
format="a=%d,b=%f\n";
printf(format,a,b);
相當於
printf("a=%d,b=%f\n",a,b);
也可以用字元陣列
char format[]="a=%d,b=%f\n";
printf(format,a,b);
但需注意 :“只能”採用在定義陣列時初始化或逐個對元素賦值的方法,而不能用賦值語句對陣列整體賦值。
新人,如有錯誤,請指正…… 用的不熟練,格式有錯誤,將就一下,嘻嘻