指標(二)
阿新 • • 發佈:2018-12-13
利用指標交換數字
1 #include<stdio.h> 2 int main() 3 { void swap(int *p1,int *p2); 4 int a,b; 5 int *pointer_1,*pointer_2; 6 scanf("%d,%d",&a,&b); 7 pointer_1=&a; 8 pointer_2=&b; 9 swap(pointer_1,pointer_2); 10 printf("%d,%d\n",a,b);11 return 0; 12 } 13 void swap(int *p1,int *p2) 14 { int *t; 15 *t=*p1; 16 *p1=*p2; 17 *p2=*t; 18 }
無執行結果
錯因分析:*p1就是a,*p2就是b,都是整型變數,而*t是指標變數t所指向的變數,但上面並沒有給t賦值,所以*t是未知的。
改正方法:
{ int *t,c; t=&c; *t=*p1; *p1=*p2; *p2=*t; }
或者
{ int t; t=*p1; *p1=*p2; *p2=t; }
利用指標輸出整型陣列
#include<stdio.h> int main() { int *p,i,a[10]; p=a; for(i=0; i<10; i++) scanf("%d",p++); for(i=0; i<10; i++,p++) printf("%d",*p); printf("\n"); return 0; }
執行結果不正確
錯因分析:因為p最初指向a[0],在輸入陣列值後,p已經指向a陣列的末尾,因此在第二個for迴圈前需要重新使p指向a[0]。
解決方法:
#include<stdio.h> int main() { int i,a[10],*p=a; for(i=0; i<10; i++) scanf("%d",p++); p=a; //重新使p指向a[0] for(i=0; i<10; i++,p++) printf("%d",*p); printf("\n"); return 0; }