---恢复内容开始---
1、数组初始化
使用花括号对括起来一系列数值来初始化数组。数值之间用逗号隔开,在数值和逗号之间可以使用空格分开。
int main(void)
{
int power[8] = {1, 2, 3, 4, 5, 6, 7, 8};
.......
}
a、如果数组不初始化,数组内的值都是随机的。
b、如果数组内的值没有全部都初始化,未初始化的值都是0。
c、可以对数组内的某个指定的元素初始化,未被初始化的值都将被设置为0。
例如 int attr[6] = { [4] = 3 }; -----即是将数组attr的第5元素的值设置成3.
2、为数组赋值
声明完数组后,可以借助数组的索引(即下标)对数组成员进行赋值。C不支持将数组看做一个整体来进行赋值,也不支持用花括号括起来的列表形式进行赋值(初始化除外)。
int main()
{
int one[4] = {1, 2, 3, 4}; /*正确*/
int two[4];
two = one; /*不允许*/
two[4] = one[4]; /*错误*/
two[4] = {2, 3, 5, 9}; /*不起作用*/
}
3、数组边界
使用数组的时候,需要注意数组索引不能超过数组的边界。
4、未初始化的指针
int *pt; //未初始化的指针
*pt = 5; //可怕的错误
切记:当创建一个指针时,系统只分配了存储指针本身的内存空间,并不分配用来存储数据的内存空间。
所以在指针使用之前必须给他赋予一个已经分配的内存空间。例如1、把指针指向一个已经存在的变量 2、用malloc函数申请新的空间。
5、指针的操作
1、赋值------把一个地址赋给一个指针。
2、求值------运算符*可以取出指针指向地址中存的值。
3、去指针的地址------指针也是有地址和数值的,用运算符&可以取出指针的地址。
4、将一个整数加给一个指针------即是这个整数乘以指针所指类型的字节数,然后所得结果加上初始的地址上。
5、求差值------可以求出两个指针间的差值,即是元素之间的距离。
6、比较------可以使用运算关系比较两个指针的大小,前提是两个具有相同的类型。
6、保护数组内容
在编写处理诸如int这样基本类型的函数时,可以向函数传递int数值,也可以向函数传递指向int的指针;通常我们只传递数值,只有需要在函数中修改该值的时候,我们才传递指针。
对于处理数组的函数,只能传递指针,因为这样更高效。如果传递数组,那么系统需要再申请一份内存传递给函数。
对形式变量使用const,即是要求函数将传进来的地址指向的值当做常量对待。
对const的理解:const不是要求原始数组固定不变;只是说明函数在处理数组时,应该把数组当作是固定不变的。
总之,如果函数想修改数组,那么在声明函数参量时不要使用const;如果函数不想修改数组,那么在声明函数参量时最好使用const。
7、指针赋值和const
1、将常量和非常量数据的地址赋给指向常量的指针时合法的。也就是说const指针可以指向const类型数据的地址,也可以指向普通类型数据的地址。
2、只有非常量的数据才能赋给普通指针。也就是说非const指针不能指向const类型数据的地址。
3、可以使用const声明并初始化指针,以保证指针不会指向别处。也就是说const声明并初始化了的指针,不能再被赋值;这样的指针仍然可用于修改数据,但他只能指向最初赋给他的地 址。
4、可以使用两个const来创建指针,这样的指针既不能修改指向的地址,也不能修改指针指向的值。
---恢复内容结束---