C++编程思想 第1卷 第3章 创建复合类型 数组 指针和数组 传递参数

想给函数传递数组,命名数组来产生起始地址非常重要

如果声明一个数字为函数参数,实际是指针


//: 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


猜你喜欢

转载自blog.csdn.net/eyetired/article/details/80720456