1. 程式人生 > >C程式設計--指標(對 “ 陣列 ” 進行輸入輸出操作)

C程式設計--指標(對 “ 陣列 ” 進行輸入輸出操作)

指標引用陣列元素

  • 方法一、下標法 : 如a[i]形式
  • 方法二、指標法 : 如*(a+i)、*(p+i)形式。其中a是陣列名,p是指向陣列元素的指標變數

** 問題:有一個整形陣列a,有10個元素,要求輸出陣列中的全部元素**

  1. 下標法
#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	for(int i=0;i<5;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}

  1. 通過陣列名計算陣列元素的地址,找出元素的值
#include<stdio.h>

int main(){
	//若需手動輸入可以在迴圈中使用:scanf("%d",a+i);來代替scanf("%d",&a[i]);
	int a[5]={5,0,3,1,2};
	for(int i=0;i<5;i++){
		printf("%d ",*(a+i));
	}
	printf("\n");
	return 0;
}

或者:

#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	int *p=a; //另外用指標指向陣列,但不能寫成: int *p=&a;(錯誤原因:cannot convert from 'int (*)[5]' to 'int *')
	for(int i=0;i<5;i++){
		printf("%d ",*(p+i));
	}
	printf("\n");
	return 0;
}

補充說明:

#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	int (*p)[5]=&a; // 可以用指向一維陣列的指標實現
	//(*p)[5]: 
	//型別表示:int (*)[4];
	//含義:p為一個指標變數,指向含有5個元素的一維陣列;
	//多用於多維陣列的處理中;

	for(int i=0;i<5;i++){
		printf("%d ",*(*(p)+i));
	}
	printf("\n");
	return 0;
}

  1. 用指標變數指向陣列元素
#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	int *p;
	for(p=a;p<(a+5);p++){
		printf("%d ",*p);
	}
	printf("\n");
	return 0;
}

用指標變數輸入資料並輸出資料

#include<stdio.h>

int main(){
	int a[5];
	int *p=a;

	for(int i=0;i<5;i++){//輸入操作
		scanf("%d",p+i);
		//等價scanf("%d",p++);
		//等價於scanf("%d",&a[i]);
		//等價於scanf("%d",a+i); //a代表陣列首元素地址,它是一個指標型常量,程式執行期間值不變(不同於p),故不能用a++;
	}
	
	//輸出方式一:用 a[i] 或用 *(a+i) ; 但不能使用a++(原因:a是指標型常量)
	for(i=0;i<5;i++){
		printf("%d ",a[i]);//等價於 printf("%d ",*(a+i));
	}
	printf("\n");

	p=a;//必須把指標重新指向a的首元素

	//輸出方式二:用 *(p+i) 或者 *p++ ; 注意:要把指標重新指向a的首元素
	for(i=0;i<5;i++){
		printf("%d ",*(p+i));//等價於 printf("%d ",*p++);
	}
	printf("\n");

	//輸出方式三:用*p
	for(p=a;p<(a+5);p++){
		printf("%d ",*p);
	}
	putchar(10);//等價於printf("\n");

	return 0;
}

注意

  1. *p++ : 等同於 *(p++);因為++和 *同優先順序;先引用p的值,實現 *p的運算,然後p自增1;
  2. *(p++) 不等同於 *(++p) ;(假設p的初值為a,即&a[0])
    前者 *(p++) :① *p ②p++ ; 若輸出 *(p++),得到a[0]的值;
    後者 *(++p):①p++ ② *p; 若輸出 *(++p),得到a[1]的值;
  3. ++(*p):表示p所指向的元素值+1;假設p=a,則++(*p)相當於++a[0];
    注意:是元素的值加1,而不是指標p的值加1;