C++中函数处理数组的一点笔记
// pointDemo0905.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" //写法1 //int sum(int array[],int num); //写法2 int sum(const int *array,int num); void revalue(int r,int *array,int num); int _tmain(int argc, _TCHAR* argv[]) { int adata[8]={1,2,3,4,5,6,7,8}; revalue(2,adata,8); int result=sum(adata,8); return result; } //写法1,当且仅当用于函数头或函数原型时int array[]和int *array含义是相同的 //int sum(int array[],int num) //{ // int total=0; // for(int i=0;i<num;i++) // total=total+array[i]; // return total; //} //写法2 两种写法函数执行效果是一样的 int sum(const int *array,int num) { int total=0; for(int i=0;i<num;i++) { //*(array+i)=10*(*(array+i)); //由于函数头声明了const ,该语句会报错 total=total+ *(array+i); } return total; } //修改数组数据 void revalue(int r,int *array,int num) { //由于需要修改数组,因此这样声明 int *array,而不是const int *array for(int i=0;i<num;i++) *(array+i)=r*(*(array+i)); } /** 1、C++中数组作为函数参数,是将数组首地址、类型、数目告知函数,而后函数对数组进行处理 2、为将数组地址和数目告知函数,请通过两个不同的参数传递 int sum(int *array,int num)或/int sum(int array[],int num) 而不用试图通过 sun(int array[size])的方式 3、使用普通参数时,由于C++按值传递,使用的是数据的副本,因此不会破坏(修改)数据,然而接受数组地址或指针的函数使用的是原始数据,直接访问了内存单元,是能够修改数据的。 4、如果需要避免函数无意中修改原始数据(在接受指针参数时),则可以在申明形参时使用关键字const 如int sum(const int array[],int num),const只是表示在sum函数内不能做诸如 array[0]++这样修改array[]的操作,并不是说在main中调用sum时的实参adata必须是常量, 常量是定义后永远不能修改直至程序退出内存销毁,此处只是在这样int sum(const int array[],int num)定义的sum函数执行中保证不修改adata数据。 自下而上的编程,从组件到整体运行,这种方法适合OOP编程,首先强调的是数据表示和操纵。 5、在C++中函数处理数组,必须将数组的类型、起始位置、数目提交给它,有两种方法 1)传统方法,fun(int *array,num)... 通过数组起始位置和数目就可以获得数组全部信息 2)指定元素区间的方法, fun(int *begin,int *end)... 通过这两个指针提供的信息也可实现对数组的全权操作 6、如果数据类型本身不是指针,则可以将const 或非const 类型的数据的地址赋给const 类型的指针,但只能将非constl类型的数据的地址赋给非const类型的指针。 如const int a=0; int b; const int *p; //只是说指针类型是常量 int *ptr; p=&a; p=&b; ptr=&b; //valid ptr=&a; //invalid */