鄭州網站開發(fā)哈爾濱seo和網絡推廣
目錄
數組傳參介紹
數組傳參規(guī)則
數組傳參的實參
特殊情況一:sizeof(數組名)
特殊情況二:&數組名
數組傳參的形參
數組傳參使用數組名作為形參接收
形參如果是?維數組
形參如果是?維數組
數組傳參使用指針作為形參接收
數組傳參介紹
在使?函數解決問題的時候,難免會將數組作為參數傳遞給函數,在函數內部對數組進?操作。
但數組作為參數傳遞給函數,不同于普通的變量傳參,本篇博客將詳細介紹數組傳參的規(guī)則和實際用法
數組傳參規(guī)則
數組傳參,形參是不會創(chuàng)建新的數組的。?形參操作的數組和實參的數組是同?個數組
數組傳參的實參
數組名作為實參傳遞 ,在通常情況下數組名就是首元素的地址。
但是有兩個意外
1.sizeof(數組名),數組名單獨放在sizeof()內部,這里的數組名表示整個數組,計算的是數組大小,單位是字節(jié)
2.&數組名,這里的數組名也是表示整個數組,取出的是整個數組的地址
數組地址和數組首元素地址不同表現在各自地址都是首元素地址,但是各自加1后,前者跳過整個數組,后者跳過第一個元素
除此之外所有遇到的數組名都表示數組首元素的地址。
特殊情況一:sizeof(數組名)
——此時數組名表示整個數組,函數返回整數的大小,單位是字節(jié)
#include<stdio.h>
int main()
{int arr[] = { 1,2,3,4,5,6 };printf("%d\n", sizeof(arr));return 0;
}
特殊情況二:&數組名
——此時數組名表示整個數組的地址
不同于一般傳參時的數組首元素地址,該地址+1后直接跳過整個數組的地址
#include<stdio.h>
int main()
{int arr[] = { 1,2,3,4,5 };printf("%p\n", arr);printf("%p\n", &arr[0]);printf("%p\n", &arr);return 0;
}
?在這三種情況下,三種輸出的結果是相同的,輸出的都是數組首元素的地址
但如果是地址+1的話,數組名+1 就不同于&數組名+1
#include<stdio.h>
int main()
{int arr[] = { 1,2,3,4,5 };printf("%p\n", arr);printf("%p\n", &arr[0]);printf("%p\n", &arr);printf("%p\n", arr + 1);printf("%p\n", &arr + 1);return 0;
}
數組傳參的形參
數組傳參使用數組名作為形參接收
形參如果是?維數組
數組大小可以省略不寫,但是數組作為形參,后面的 [ ] 不可以省略
比如可以寫成arr[ ] 或者arr[8]
#include<stdio.h>
void set(int arr[], int sz) //將數組所有元素置為-1
{for (int i = 0; i < sz; i++){arr[i] = -1;}
}
void print(int arr[], int sz)//依次打印數組所有元素
{for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[] = { 0,1,2,3,4,5,6,7 };int sz = sizeof(arr) / sizeof(arr[0]);//計算數組元素的個數print(arr, sz);set(arr, sz);print(arr, sz);
}
形參如果是?維數組
行可以省略,但是列不能省略,并且每個[ ]都不能省略
比如可以寫成 arr[ ][3] 或者arr[3][3]
#include<stdio.h>
void set(int arr[][3], int sz) //將數組所有元素置為-1
{for (int i = 0; i < sz; i++){for (int j = 0; j < 3; j++){arr[i][j] = -1;}}
}
void print(int arr[][3], int sz)//依次打印數組所有元素
{for (int i = 0; i < sz; i++){for (int j = 0; j < 3; j++){printf("%d ", arr[i][j]);}printf("\n");}printf("\n");
}
int main()
{int arr[][3] = {0,1,2,3,4,5,6,7,8};int sz = sizeof(arr) / sizeof(arr[0]);//計算數組元素的行數print(arr, sz);set(arr, sz);print(arr, sz);
}
數組傳參使用指針作為形參接收
形參使用指針接收之后,得到的是一個數組首元素的地址
得到數組首元素地址之后,就可以對數組任意元素進行操作
#include<stdio.h>
void set(int* arr,int sz) //將數組所有元素置為-1
{for (int i = 0; i < sz; i++){arr[i] = -1;}
}
void print(int* arr, int sz)//依次打印數組所有元素
{for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[] = { 0,1,2,3,4,5,6,7 };int sz = sizeof(arr) / sizeof(arr[0]);//計算數組元素的個數print(arr, sz);set(arr, sz);print(arr, sz);
}