1.求数组元素个数:sizeof (num)/num[0]。
2.指定初始化项目(C99):
int arr[6]={[5]=212};//未初始化的元素都被设置为0
特性:
a)如果在一个指定初始化项目后跟有不知一个值,则这些值用来对后续的数组元素初始化。
b)如果多次对一个元素初始化,则最后一次有效。
3.C不支持把数组作为一个整体进行赋值,也不支持用花括号括起来的列表形式进行赋值(初始化的时候除外)。
4.初始化二维数组:
可以省略内部的花括号,只保留最外面的一对花括号。
5.打印sizeof的返回值用%zd,若不支持用%u或%lu。
打印地址用%p,若不支持用%u或者%lu。
6.使用指针参数:
#include<stdio.h>
#define SIZE 10
int sump(int * start,int * end);
int main()
{
int num[SIZE]= {20,10,5,39,4,16,19,26,31,20};
int answer;
answer=sump(num,num+SIZE);
printf("The total number is %d.\n",answer);
return 0;
}
int sump(int * start,int * end)
{
int total=0;
while(start<end)
total+=*(start++);//*和++优先级相同,结合时都是从右向左,括号可加可不加
return total;
}
C保证在分配存储空间的时候,指向数组之后的第一个位置的指针是合法的。
7.使用指针时,有一个规则需要特别注意:不能对未初始化的指针取值。
int *p;//p未初始化,值是随机的
*p = 5;//5被存到未知的位置,可能会覆盖系统的内存数据
切记:当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并不分配用来存储数据的内存空间。所以在使用指针前,必须赋予它一个已分配的内存空地址。比如可把一个已经存在的变量地址赋给它,或使用malloc()函数分配内存。
8.数组名为指针常量,不可修改。
9.对数组使用const,使数组内容不被改变。将常量或非常量数据的地址赋给指向常量的指针是合法的(非const 赋给 const 允许的前提是只进行一层运算),只有非常量数据的地址才可以赋给普通的指针(不能将const 赋给非const),否则就可以用指针来修改被认为是常量的数据。
double * const p = num;//使p不指向别处,可以修改数据
const double * p = num;//不能修改p的数值,但可以修改num【0】
10.二维数组要取两次值才可以取出存储的数据。
11.函数和多维数组:
void fun(int (* p)[4]);
void fun(int p[][4]);
12.变长数组(VLA):
变长数组的变指其维大小可以用变量来指定。
声明:
可以用*代替中括号中的rows和cols。
13.复合文字: