1. 程式人生 > >初識指標——1

初識指標——1

① *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];
				```
  1. 一維陣列名指向列元素。
    在指向行的指標前面加一個*,就轉換為指向列的指標;
    在指向列的指標前面加一個&,就成為指向行的指標;
    &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);

但需注意 :“只能”採用在定義陣列時初始化或逐個對元素賦值的方法,而不能用賦值語句對陣列整體賦值。

新人,如有錯誤,請指正…… 用的不熟練,格式有錯誤,將就一下,嘻嘻