1.动态生存周期: 局部变量。
2.静态生存周期: 全局变量, 和带 Static的静态局部变量。如(Static int i;)
3.全局变量和局部变量如果都只是定义,而没有赋初值,则系统会自动把全局变量初始化为0. 但不会初始化局部变量为0,局部变量在没有初始化的情况下是一个随机数。
4.全局及局部变量定义的一般规则:
(1)标识符必须先定义再使用。
(2)在同一作用域内不包含同名标识符。
(3)在没有包含关系的不同作用域内声明的同名标识符互不影响。
(4)在两个或两个以上具有包含关系的作用域内声明了同名标识符,则外层标识符在内层不可见。(就近原则)
5.auto int sum; 前面的 auto 是储存类别说明,一般都会省略这个自动储存类别标识,在新版的 C标准中将此问题都删掉了,
此处可以只是了解知道一下。
6.register int i = 10; //此处的意思是建议,编译器将变量放入到寄存器中。 如果此种写法则是不能对 i取地址的(&i),
此种定义无法取址,一般在试题中会出现。
7.extern 声明外部变量。
8.关于函数无非就是封装了,将平时完成某一功能的过程封装起来,以后想要使用时同一功能时只需要调用,以前写过的函数来完成即可。封装一个函数时要注意的是,此函数是否需要返回某种类型的值,即使不需要返回值也要声明函数为 void 类型。第二点要注意的就是函数的形参,形参的类型与以后调用时要赋予的实参类型要相同,形参与实参的个数也要相同。如果写的函数是操作数组的无论是操作一维数组还是二维数组,都要注意,函数的参数要有数组名和数组的长度。数组名其实也就是 数组首个元素的地址。
写一个数组的二分查找。
#include <stdio.h>
#include <string.h>
void bubbleSort(int a[], int len) //一维数组的冒泡排序法
{
int i, j;
for(j = len - 1;j > 0;--j)
{
for(i = 0;i < j;++i)
{
if(a[i] > a[i + 1])
{
int t;
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
}
void printArray(int a[], int len) //打印一维数组
{
int i;
for(i = 0;i < len;++i)
{
printf("%d ,", a[i]);
}
puts("\b "); //退格加一个空格覆盖掉逗号。
}
int find(int a[], int len, int n)
{
bubbleSort(a, len); //注意二分查找的条件是先要排序。
int begin = 0;
int end = len - 1;
int mid;
while(begin <= end)
{
mid = (begin + end) / 2;
if(a[mid] > n)
{
end = mid - 1;
}
else if(a[mid] < n)
{
begin = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main(void)
{
int a[10] = {1,2,3,4,5,6,7,8,9,0};
int index;
if((index = find(a, sizeof(a) / sizeof(a[0]), 8)) >= 0)
{
printf("found! %d\n", a[index]);
}
else
{
printf("not found\n");
}
// bubbleSort(a, sizeof(a) / sizeof(a[0]));
// printArray(a, sizeof(a) / sizeof(a[0]));
return 0;
}