指針與一維數組之間的關係
一、數組指針:指向數組首地址的指針
特點:
1、允許指針加一個整數,+1表示指針指向了數組當前元素相鄰的下一個元素
2、允許指針減一個整數,-1表示指針指向了數組當前元素相鄰的前一個元素
3、允許指針進行自增自減運算,如p++,++p、p--,--p
4、使用指針來循環遍歷數組寫法爲 *(a+i)或者 *(p+i)a爲數組名,p爲指針,使用數組的下標來循環遍歷數組,寫法爲:a[i]
5、當p1和p2都指向同一數組中的元素時,允許指針相減 ,值是數組地址的差值,可用於判斷指針變量指向的元素是否連續,如果差值的絕對值爲0則連續;
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義一個數組
int a[4] = {1,2,3,4};
//定義一個指針並指向數組的首地址
int *p = a; //也可以寫成 int *p = &a[];
int i;
//打印出數組的每個元素
for(i = 0; i < 4; i++)
{
printf("a[%d] = %d\n",i,a[i]);
}
//打印出地址
printf("數組a的a[0]地址: = %p\n",&a[0]);
printf(" 數組a的首地址: = %p\n",a);
printf(" 指針p的地址: = %p\n",p);
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定義一個數組
int a[4] = {1,2,3,4};
//定義一個指針並指向數組的首地址
int *p = a; //也可以寫成 int *p = &a[];
int i;
//打印出數組的每個元素
for(i = 0; i < 4; i++)
{
printf("a[%d] = %d\n",i,a[i]);
}
//打印出地址
printf("數組a的a[0]地址: = %p\n",&a[0]);
printf(" 數組a的首地址: = %p\n",a);
printf(" 指針p的地址: = %p\n",p);
//指針p加減一個整數測試
printf("讓指針p加1之後爲:%d\n",*p+2);
//指針p加減一個整數測試
printf("讓指針p加1之後爲:%d\n",*p);
int j;
//指針p自增自減
for(j = 0; j < 4; j++)
{
printf("a[%d] = %d\n",j,*p++);
}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *p = a; // 定義一個指針並指向a
//讓p1指向數組的第四個元素
int *p1 = p+3;
printf("%d,%d\n",*p,*p1);
//指針之間的減法運算,值爲地址的差值
printf("p1-p = %d\n",p1-p);
printf("p1-p = %d\n",p-p1);
system("pause");
return 0;
}
二、指針數組
指針數組:一個數組元素的值爲指針則稱爲指針數組,指針數組是一組有序指針的集合。
一般形式:
類型說明符 * 數組名 [數組長度];例如:int *p [ 3 ] = {&a,&b,&c};
特點:p是數組的首地址,又是變量a的地址
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 3, b = 4, c = 5;
//定義一個指針數組
int *pa[3] = {&a,&b,&c};
//打印數組的第一個元素的值
printf(" &a = %p\n",&a);
printf(" pa[0]= %p\n",pa[0]);
//打印數組的首地址
printf(" pa = %p\n",pa);
printf("&pa[0]= %p\n",&pa[0]);
//打印出a的值
printf(" *(&a)= %d\n",*(&a));
printf("*pa[0]= %d\n",*(pa[0]));
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 3, b = 4, c = 5;
//定義一個指針數組
int *pa[3] = {&a,&b,&c};
//打印數組的第一個元素的值
printf(" &a = %p\n",&a);
printf(" pa[0]= %p\n",pa[0]);
//打印數組的首地址
printf(" pa = %p\n",pa);
printf("&pa[0]= %p\n",&pa[0]);
//打印出a的值
printf(" *(&a)= %d\n",*(&a));
printf("*pa[0]= %d\n",*(pa[0]));
//使用數組名訪問a的值
printf(" a = %d\n",**pa);
system("pause");
return 0;
}