想给函数传递数组,命名数组来产生起始地址非常重要
如果声明一个数字为函数参数,实际是指针
//: C03:ArrayArguments.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt #include <iostream> #include <string> using namespace std; void func1(int a[], int size) { for(int i = 0; i < size; i++) a[i] = i * i - i; } void func2(int* a, int size) { for(int i = 0; i < size; i++) a[i] = i * i + i; } void print(int a[], string name, int size) { for(int i = 0; i < size; i++) cout << name << "[" << i << "] = " << a[i] << endl; } int main() { int a[5], b[5]; // Probably garbage values: print(a, "a", 5); print(b, "b", 5); // Initialize the arrays: func1(a, 5); func1(b, 5); print(a, "a", 5); print(b, "b", 5); // Notice the arrays are always modified: func2(a, 5); func2(b, 5); print(a, "a", 5); print(b, "b", 5); getchar(); } ///:~
func1() func2() 有一样的参数表
func1() func2()以不同方式声明参数
函数的内部用法是一样的
暴露了问题,数组不可以按值传递
不会自动得到传递给函数的数组的拷贝
修改数组时,是修改外部对象
print()对数组参数使用方括号语法
数组做为参数传递,指针语法和方括号语法是一样的
方括号让人更明白 参数是一个数组
每一种情况都传递了参数size
仅仅传递数组的地址不够,还要知道函数有多大,这样不会数组越界
输出
a[1] = -858993460
a[2] = -858993460
a[3] = -858993460
a[4] = -858993460
b[0] = -858993460
b[1] = -858993460
b[2] = -858993460
b[3] = -858993460
b[4] = -858993460
a[0] = 0
a[1] = 0
a[2] = 2
a[3] = 6
a[4] = 12
b[0] = 0
b[1] = 0
b[2] = 2
b[3] = 6
b[4] = 12
a[0] = 0
a[1] = 2
a[2] = 6
a[3] = 12
a[4] = 20
b[0] = 0
b[1] = 2
b[2] = 6
b[3] = 12
b[4] = 20