1.使用数组区间的函数
传统C/C++方法是将指向数组起始处的指针作为一个参数,将数组长度作为第二个参数。还有另一种方法是指定元素区间,这可以通过传递两个指针来完成:一个指针标识数组的开头,另一个指针标识数组的尾部。
假设有double elboud[20];则指针elboud和elboud+20定义了区间。表达式elboud+19指向最后一个元素(elboud[19]),因此,elboud+20指向数组结尾后面的一个位置。
指针cookies+ArSize指向最后一个元素后面的一个位置(数组有ArSize个元素,因此cookies[ArSize-1]是最后一个元素,其地址为cookies+ArSize-1)。因此,区间[cookies,cookies+ArSize]指定的是整个数组。
2.指针和const
关于const int * a 和 int * const a 的区别:
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20090928/2.jpg
如果愿意,还可以声明指向const对象的const指针:
stick只能指向trouble,且stick不能用来修改trouble的值。
为防止函数无意中修改数组的内容,可在声明形参时使用关键字const:void show_array(const double ar[], int n);
该声明表明,指针ar指向的是常量数据,不能用ar来修改该数据。这并不意味着原始数组必须是常量,而只是意味着不能在show_array()函数中使用ar来修改这些数据。这里的数组元素师基本类型。但如果它们是指针或指向指针的指针,则不能用const。只要有一层间接关系,就可以使用这种技术。
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20090928/3.jpg
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20090928/1.jpg
3.函数和二维数组
int sum(int (*ar2) [4], int size);
其中的括号是不可少的,因为声明 int *ar2[4]将声明一个由4个指向int的指针组成的数组,而不是由一个指向由4个int组成的数组的指针。在声明ar2时,没有用const,因为这种技术只能用于指向基本类型的指针,而ar2是指向指针的指针。
4.函数和C-风格字符串
假设要将字符串作为参数传递给函数,则表示字符串的方式有3种:
1)char数组;
2)用引号括起的字符串常量(也称字符串字面值);
3)被设置为字符串的地址的char指针。
处理字符串中字符的标准方式:
5.函数和结构
按值传递结构有一个缺点。如果结构非常大,则复制结构将增加内存要求,降低运行的速度。所以更倾向于传递结构的地址,然后使用指针来访问结构的内容。