语言精髓:指针,数组,结构体,其他语言所没有的底层驱动管理
那么计划章节:10章 指针与数组 12章存储类,链接,内存管理 13章文件输入输出
14章结构和其他数据表示
15章 位操作
16章C预处理
10章指针与数组
数组是由一系列类型相同的元素组成
假如用的是ANSI之前的编译器,初始化数组的时候需要加上static
设定只读数组的时候最好加上const
数组可以被定义为多组存储类
编译器如果做得好的话,没有初始化的部分会自动化为0
编译器C99增加的新特性:指定初始化项目
可以指定数组的某一项初始化,比如 int arry[6] = {[5] = 212};
无效的数组赋值:
Int oxen[SIZE] = {5,3,2,8};
Int yass[SIZE];
Yass = oxen ; 不允许
Yass[SIZE] = oxen[SIZE]; 不正确
Yass[SIZE] = {5,3,2,8}; 不起作用
声明数组的时候必须注意数组边界
为了解决数组越界的问题,最好在使用数组大小的地方都引用符号常量
多维数组
超过了最大个数会报错,没有的就会为0
指针和数组
各个类型申请的空间大小
等价:
dates + 2 = &date[2] 相同地址
*(dates+2) = date[2] 相同值
我错了,我明白了。
这个*是一个运算符而不是标志符,是间接运算符
这也是为什么
#include
int main()
{
int a[5] = {1,2,3,4,5};
printf("a = %x\n",a);
printf("&a = %x\n",&a);
printf("&a[0] = %x\n",&a[0]);
printf("*(int*)&a = %x\n",*(int*)&a);
printf("*&a = %x\n",*(&a));
printf("*&a[0] = %x\n",*(&a[0]));
return 0;
}
加了((&a))的值为1
*date+2 第一个元素加二的值
*(date+2) 第三个元素的值
指针,数组,函数
Int sum(int *arr,int n)
{
Int i;
Int total;
For(i = 0;i<10;i++)
{
Total += arr[i];
}
Return total;
}
Int sum(int arr[],int n)
不仅指向int的指针,还能指向某一个数组元素