以下程式,無論是change1還是change2函式,都屬于傳址,陣列元素的值均被修改。
如何改為僅把陣列值傳過去?以便在函式內修改元素時,不至于把原來的陣列給改了。
#include <stdio.h>
void change1(int *array, int n);
void change2(int array[], int n);
int main() {
int array[] = {1, 2, 3, 4, 5};
change1(array, 5);
for (int i = 0; i < 5; ++i) {
printf("%d, ", array[i]);
}
}
void change1(int *array, int n) {
for (int i = 0; i < n; ++i) {
*(array + i) = 0;
}
}
void change2(int array[], int n){
for (int i = 0; i < n; ++i) {
array[i] = 0;
}
}
uj5u.com熱心網友回復:
陣列引數加個const應該可以實作你的要求。uj5u.com熱心網友回復:
可以把陣列整體放進結構體,傳遞結構體型別的引數。uj5u.com熱心網友回復:
局限是結構體中的陣列大小必須是常量。uj5u.com熱心網友回復:
為什么這么麻煩,如果是普通變數就很容易,傳值傳址一個*號的事情。
uj5u.com熱心網友回復:
因為C語言的設計者希望一方面簡化編譯器的復雜度,另一方面給C猿以足夠的自由。你真的需要副本的話完全可以在上級(呼叫者)函式里自己處理,memcpy搞定即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251198.html
標籤:C語言
上一篇:為什么模板的語法要放在開頭template<typename T>
下一篇:請教大神
