1: 声明的语法:
2:存储类型
++++++++++++++++++
注意auto 是在函数里面的默认的,extern 是在函数外面的时候的默认的
4:声明符号
(a) 存储类型, (b)存储限定, (c)类型说明 (d) 声明符
例如:static const int i;
(a)存储类型包括:auto(一般是在函数题里面,用完就不要了),static(函数结束才释放), extern(在外面声明的) 和register(寄存器变量,保存在寄存器中而不是内存中)
(b)类型限定符包括:const(常量,值不可修改了) 和volatile(这个一般会用在嵌入式的底层里面用到的)
(c)类型说明符包括:void,char,short,int,long,float,double,signed,unsigned,结构,联合和枚举
2:存储类型
变量的三个特性:
a,存储期限,氛围自动存储期限和静态存储期限
b,作用域,分为块作用域和文件作用域
c,链接,分为外部链接,内部链接和无链接
外部链接的变量可以被几个文件共享
内部链接的变量智能在当前文件共享,例如static int i;
无链接的变量属于单独的函数,不能被共享
++++++++++++++++++
//
// main.c
// ShengMing
//
// Created by 千 on 16/7/24.
// Copyright © 2016年 kodulf. All rights reserved.
//
#include <stdio.h>
int a;//静态存储期限
//文件作用域
//外部链接,可以被几个文件共享
static int c;//快外的static 由外部链接转换为内部链接,
//内部链接,只能在当前的文件共享
void f(){
//自动存储期限
//无链接,属于单独的函数,不能被共享,只有自己的函数内部能用
int b;
//块作用域,片警
static int d;//快内的static 变量由自动存储期限改为静态存储期限。
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
int age =20;
static const int a = 10;
//后面这个顺序是错误的 const static int a = 10 ;
//不可以修改为a=200;因为const定义的是不可修改的
return 0;
}
++++++++++++++++++
注意auto 是在函数里面的默认的,extern 是在函数外面的时候的默认的
2.2 auto 存储类型,只属于某个代码块(就是函数里面),具有自动存储期限,块作用域并且无链接,(auto 一般是在函数题里面,用完就不要了 可以不写,默认的就是)
2.3 static 存储类型,快外的static 由外部链接转换为内部链接,快内的static 变量由自动存储期限改为静态存储期限。
2.4 extern 存储类型,可以是几个文件共享该变量,例如extern int i;i变量只是声明而不是定义,一个变量可以声明多次,但职能定义一次。extern声明的变量始终是具有静态存储期限(extern 一般是在函数体外,就是快外,默认的就是extern的)
2.5 函数的存储类型,只有两个extern 和static,extern具有外部链接,static 具有内部链接,如果不佳任何关键字默认具有外部链接
const 有点像宏定义,
4:声明符号
规律:
a,始终从内向外读声明符
b,在作选择时始终先[]后()后*
由标识符*号()以及[]来组成,这些符号可以
int *ap[10];//这个叫指针数组呢,还是数组指针呢?这个由一个规律
// []优先级高,所以ap是指向数组的指针
float *fp(float);//()优先级高,所以fp是返回指针的数组
void (*pf)(int);//*pf在括号里面pf是指针,后面跟着(),所以pf必须只想函数