——黑馬程序員——C語言中的指針(二)

-----------android培訓java培訓、java學習型技術博客、期待與您交流!-----------
指針與一維數組之間的關係

一、數組指針:指向數組首地址的指針

特點:
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;
}



















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章