陣列做函式引數退化為指標
阿新 • • 發佈:2019-02-04
#include "stdio.h" #include "stdlib.h" #include "string.h" void printfArray(int *a) { int i = 0; for (i=0; i<10; i++) { printf("%d ", a[i]); } } //1.陣列做函式引數,會退化為指標 void printfArray2(int *a, int num) { int i = 0; for (i=0; i<num; i++) { printf("%d ", a[i]); } } //2.在形參裡面出現的char buf[30] int a[10] c/c++編譯器會把它當做指標,也不會主動的多分配記憶體 //編譯器在處理傳參的時候不是複製整個陣列,而是將陣列轉化為指標,所以陣列作為引數的時候會退化為指標 void printfArray3(int a[10]) { int i = 0; int num1 = sizeof(a);//4 int num2 = sizeof(*a);//4 int num = sizeof(a)/sizeof(*a);//1 printf("num1:%d, num2:%d, num:%d \n", num1, num2, num); for (i=0; i<num; i++) { printf("%d ", a[i]); } } void main() { int i = 0, j = 0; int a[10] = {1, 3, 44, 2, 3, 44, 5, 5,6, 67}; int tmp = 0; int num1 = sizeof(a); //資料型別不一樣 printf("\n排序之前 %d:", num1); // for (i=0; i<10; i++) // { // printf("%d ", a[i]); // } printfArray3(a); for(i=0; i<10; i++) { for (j=i+1;j<10; j++) { if (a[i] < a[j]) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } printf("\n排序之後:"); // for (i=0; i<10; i++) // { // printf("%d ", a[i]); // } printfArray3(a); system("pause"); }