7.函数和多维数组
在函数中用指针表示多维数组的好处:可以记录行和列的信息
那么如何声明呢?
//表示 int array[rows][cols]
void sum(int ar[][cols],int rows);
void sum(int [][cols],int );
void sum(int (*ar)[cols],int rows);
这三种方法都ok啦
然后双重循环就可以找到确定的位置
那为什么不能省略第二个括号的值呢?
因为,指针ar指向一个内含cols个int类型值的数组,所以,让ar有基本单位才是目的
所以,当cols一样时,函数sum就能处理,不论rows的值为多少
一般而言,声明一个指向N维数组的指针时,只能省略最左面方括号的值
8.变长数组
变长数组有一些性质:必须为自动存储类别,这意味着无论在函数中声明还是作为函数形参声明,都不能使用static或extern,而且不能在声明中初始化它们,但可以声明它们。
注意:“变”指的是:在创建数组时,可以使用变量指定数组的维度,但是一旦创建,数组大小则保持不变
正是因为变长数组的存在,单位也就可以改变了,设一个函数即可
变长数组在声明时可以使用const
9.复合字面量
5是int类型字面量,16.6是double类型字面量,"cat"是字符串字面量,'Y’是char类型字面量
int dive[2]={10,20};
和dive数组相同的匿名数组表示如下:
(int [2]){10,20} //这就是所谓的复合字面量
去掉声明中的数组名,留下int [2]即是复合字面量的类型名
当然了,[ ]里的数值不写也ok的
注意:
复合字面量因为是匿名,所以必须在创建的同时使用它
int * pt;
pt=(int [2]){10,20};
而且,还可以把复合字面量作为实际参数传递给相应函数
最后再举一个如何创建二维数组的栗子
int (*pt2)[4];
pt2=(int [2][4]){{1,2,5,7},{8,7,6,9}};
别忘了,复合字面量的定义在最内层的花括号中
好啦,指针就告一段落了,下面会对字符串进行笔记整理。
第一次写博客是唉声叹气的状态,但是,我不想每次看我辛辛苦苦整的笔记的时候,会被这种情绪笼罩,当然也不希望看我博客的人会被我拉进悲伤的漩涡。
希望一切都会好起来,或者换种方式说:希望我可以适应每一种生活状态。同时希望我没有看错高狮,他永远都在,就像爱一样,无处不在~~