程序7.5 arrfun1.cpp
如同使用数组名那样使用指针,程序将数组初始化为某些值,并使用sum_arr()函数计算总数,注意sum_arr()函数使用arr时,就像是使用数组名一样。
#include<iostream>
const int ArSize = 8;
int sum_arr(int* arr, int n);
int main()
{
using namespace std;
int cookies[ArSize] = { 1,2,4,8,16,32,64,128 };
int sum = sum_arr(cookies, ArSize);
cout << "Total cookies eaten: " << sum << "\n";
return 0;
}
int sum_arr(int* arr, int n)
//int sum_arr(int arr[], int n)另一种写法
{
int total = 0;
for (int i = 0; i < n; i++)
total = total + arr[i];
return total;
}
函数如何使用指针来处理数组
两个恒等式:arr[i] == *(arr + i);&arr[i] == arr+i;
cout << sizeof(cookies) << endl; //数组长度,int有4个字节,共有8个为32
cout << sizeof(&cookies) << endl; //地址的长度
cout << cookies << endl; //数组第一个元素4个字节的地址
cout << &cookies << endl; //整个数组内存块32个字节的地址,虽然长度不一样,但是地址都是一样的
将数组作为参数意味着什么
程序清单7.5中,并没有将数组的内容传递给函数,而是将数组的位置(地址)、包含元素的种类(类型)以及元素的数目(n变量)提交给函数。
程序清单7.6 arrfun2.cpp
cookies与arr的值相同,演示了指针概念如何使sum_arr函数比以前更通用,该程序使用限定符std::而不是编译指令using来提供对cout与endl的访问权。
#include<iostream>
const int ArSize = 8;
int sum_arr(int* arr, int n);
int main()
{
int cookies[ArSize] = { 1,2,4,8,16,32,64,128 };
std::cout << cookies << " = array address, ";
std::cout << sizeof(cookies) << " size of cookies.\n";
int sum = sum_arr(cookies, ArSize);
std::cout << "Total cookies eaten: " << sum << "\n";
sum = sum_arr(cookies, 3);
std::cout << "Total cookies eaten: " << sum << "\n";
sum = sum_arr(cookies+4, 4);
std::cout << "Total cookies eaten: " << sum << "\n";
return 0;
}
int sum_arr(int* arr, int n)
{
int total = 0;
std::cout << arr << " = arr, ";
std::cout << sizeof(arr) << " = sizeof(arr)\n"; //arr是一个指针,指针变量的长度,指针内部存储的是地址,64/8=8
for (int i = 0; i < n; i++)
total = total + arr[i];
return total;
}