1.C++的函数返回值不能是数组,但可以是整数、浮点数、指针、结构或对象。可以将数组作为结构或对象的组成部分来返回。
2. int arr[];
arr[i]==*(arr+i); &arr[i]==arr+i;
3.将数组类型和元素数量告诉数组处理函数,用两个不同的参数传递:void fillArray(int arr[], int size);
不要用 void fillArray (int arr[size]);
4. const Size=8;
int sum_arr(int arr[], int n);
void main(){
int cook[Size]={1,2,3,4,5,6,7,8}; cout<<sizeof cook ; //显示的长度是32
int sum=sum_arr(cook,Size); }
int sum_arr( int arr[], int n){
cout<<arr; cout<<sizeof arr; //显示的长度是4, cook和arr指向同一个地址,
但sizeof cook是32(整个数组的长度),sizeof arr是4(指针变量的长度)
......
}
5.保护数组,使数组视为可读数据时,用const声明
函数要修改数组,原形:void f_modify( double arr[], int n);
函数不修改数组,原形:void f_nochange(const double arr[], int n);
8.使用数组区间的函数:
const Size=8;
int sum_arr(const int * begin, const int * end);
void main(){
int cook[Size]={1,2,3,4,5,6,7,8};
int sum=sum_arr(cook, cook+Size); }
int sum_arr(const int * begin, const int * end){
int total=0; const int * pt;
for (pt=begin; pt!=end; pt++)
total=total+ *pt;
}
9.一般将指针参数声明为 指向一个常量对象的指针,不能使用指针来修改所指向的值,而能修改指针指向的位置。
int age=39;
const int * pt=&age; //指向一个常量对象的指针,不能使用指针来修改所指向age的值 ,可以使pt指向其他位置 *pt+=1; (不合法)
int * const finger=&age;//指针本身为常量,不能修改指针指向的位置,但可以用finger修改age的值
以上finger, *pt是const ,*finger 和pt 不是const.
禁止将常量数组的地址赋给非常量指针,可以使用强制类型转换来突破这种限制。(P222)
10.函数与二维数组:
int data[3][4]={{1,2,3,4},{9,2,1,4},{2,4,6,3}}; int total=sum(data,3);
sum的原形: int sum( int (*arr2)[4] , int size); // (*arr2)[4] 表示由4个int组成的数组的指针 size表示行数
或者:int sum( int arr2[][4], int size); //这两个原形arr2是指针而不是数组
( int *arr2[4] 表示由4个指向int的指针组成的数组。)
arr2
arr2+r
*(arr2+r)
*(arr2+r)+c
*(*(arr2+r))+c==arr2[r][c]
12.while (*str) 等价于 while (*str!="