指針變量
要點
1.任何指針變量佔用的空間都是4個字節(32位機)
2.任何指針變量加1是使它指向下一個元素的地址
測試程序
void test_1()
{
char c;
int i;
long l;
float f;
double d;
char *pc = &c;
int *pi = &i;
long *pl = &l;
float *pf = &f;
double *pd = &d;
printf("%d\t%x\t%x\n", sizeof(pc), pc, pc + 1);
printf("%d\t%x\t%x\n", sizeof(pi), pi, pi + 1);
printf("%d\t%x\t%x\n", sizeof(pl), pl, pl + 1);
printf("%d\t%x\t%x\n", sizeof(pf), pf, pf + 1);
printf("%d\t%x\t%x\n", sizeof(pd), pd, pd + 1);
}
運行結果
指針與一維數組
要點
1. 數組名a指向的是數組首元素地址
2. &a指向的纔是數組的首地址
3. a[n]內部處理就相當於*(a+n)
測試程序
void test_2()
{
char a[5]={0,1,2,3,4};
printf("%d\t%d\n",&a,&a+1);
printf("%d\t%d\n",a,a+1);
printf("%d\t%d\n",a[1],*(a+1));
}
運行結果
指針與二維數組
要點
1. 二維數組可以看成是一維數組中的每一個元素又是一個一維數組
2. 二維數組名指向的是數組首元素的地址,即行地址
3. 對行地址前加*就轉換爲列地址
4. 對列地址前加&就轉換爲行地址
5. &a纔是二維數組的首地址
6. a[n][m]就相當於*(*(a+n)+m)
測試程序
void test_3()
{
char a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
printf("%d\t%d\n",&a,&a+1);
printf("%d\t%d\n",a,a+1);
printf("%d\t%d\n",*a,*a+1);
printf("%d\t%d\n",a[0],a[0]+1);
printf("%d\t%d\n",&a[0],&a[0]+1);
printf("%d\t%d\n",a[1][2],*(*(a+1)+2));
}
運行結果
《C語言程序設計》