数组和函数(C语言)

个人学习记录:2018年7月23日

1、数组定义时,若没有赋值,则必须在[]中输入常数,不允许数组的大小做动态定义。

2、全局变量默认为0,局部变量默认为随机值,数组部分初始化,则未初始化的部分置为0。

3、数组名作为地址的相关操作。

int array[5];
printf("%p\n",array+1);
printf("&p\n",&array[0]+1);
printf("%p\n",&array+1);

 array为数组首元素的地址,array+1后为下一元素的地址,&array[0]同理,而&array则是整个数组的地址,&array+1后地址后移整个数组大小。

int a[4][3];
printf("%p\n",&a[0][0]+1);
printf("%p\n",a[0]+1);
printf("%p\n",&a[0]+1);
printf("%p\n",a+1);
printf("%p\n",&a+1);

上面的二维数组操作中,a[0][0]为首个元素,则&a[0][0]+1为下一个元素,同理a[0]为首行首元素的地址,则a[0]+1也表示下一个元素的地址。&a[0]为首行地址,则&a[0]+1为下一行地址,即a+1。如上例,&a是整个数组的地址,&a+1是地址后移整个数组大小,级48B。

[x]等效于*(a+x)。

二维数组初始化,列数目必须确定,如a[][N}。

4、return会结束函数调用,返回结果;exit()会终止程序。

5、函数调用顺序:

 (1)通过函数名找到入口地址;

 (2)形参分配内存空间;

 (3)传值(实参传给形参,主要包括值和地址的传递)

 (4)执行函数体;

 (5)返回上一级函数;

 (6)释放空间(主要是栈空间)

6、auto自动变量(一定是局部变量),正常定义变量之前均有,默认可省略。如int i;实际为auto int i;。

7、register寄存器变量,通常用来定义需要被大量访问的变量,但不可被取地址(只有内存中的变量才能被取地址)。

8、extern声明本文件外的全局变量,使其可以在本文件内被调用。static则可以改变变量作用域,使其不可被其它文件调用,也可以用作静态变量,防止如函数内的地址类返回值被默认清理。

你可能感兴趣的:(数组和函数(C语言))