带你玩遍c语言(1)关键字
来源:互联网 发布:深圳冰川网络 编辑:程序博客网 时间:2024/05/21 10:37
c语言有多少关键字
你知道C语言有多少关键字吗?你能一一说出它们的名字与作用吗?
肯定有许多人答不上来,那么让我告诉你C语言一共32个关键字,具体如下:
定义与声明
定义:编译器创建一个对象,为该对象分配一块内存并为之取一个名字
声明:1.告诉编译器这个名字已经分配上内存了2.告诉编译器,这个名字已经被预定了,不得重名。
int i;//定义
extern int i;//声明
register
这个关键字就是让变量存在寄存器中
注意点:
register修饰的变量必须是CPU所能接受的类型,就是该变量必须是单个值且小于等于整型长度(想想汇编就明白了)
由于该变量不存在内存,所以不能用&取地址
static
修饰变量
变量又分局部变量与全局变量
1.静态全局变量:
作用域仅限于变量被定义的文件中,其他文件即使用extern声明也无法使用
2.静态局部变量:
在函数体中定义,只能在该函数中使用,当让这个静态变量即使函数结束也不会被销毁
修饰函数
静态函数:对函数的作用域仅限与本文件(内部函数)
好处:不同的人编译不同的函数时,不用担心自己定义的函数是否与其他文件中的函数同名
sizeof
int i;
sizeif i;
此时得到的值是多少?4,即使sizeof不叫括号也能预算,所以它一定不是函数。
int *p = NULL;
sizeof(p)//地址4
sizeof(*p)//数4
int a[100]
sizeof(a) //数组块 400
sizeof(a[100]) //值,此值随机 4
sizeof(&a) //4
signed\unsigned
int main(){ signed char a[1000]; int i; for(i=0;i<1000;i++) { a[i] = -1-i; } printf("%d",strlen(a)); return 0;}
得到的为255
为什么,补码问题,后面会详细解释
void
其作用:对函数返回的限定,对函数参数的限定
1.如果函数没有返回值,那么应将其声明为void类型
2.如果函数无参数,那么应声明其参数为void
3.在使用void*指针的时候,一定要用限定类型再操作
4.void声明的是一种抽象
return
return不可返回“栈内存”的指针,因为该内存在函数体结束后会被销毁
const
编译器通常不为普通const只读变量分配存储空间,而是将他们保存在符号表中
而宏定义是立即数,从编译的角度来看宏定义有若干份备份,而const只有一份,且宏定义是没有类型的,而const有,那么类型出错也会报error
那么我们最常碰到是咋么记住const修饰的指针或者指针变量,记住“进水楼台先得月”,去掉类型名,看const修饰谁
volatile
告诉编译器不要优化,继续去取内存中的值,
const和volatile放在一起的意义在于:
(1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;
(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。
“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。
“volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这个值”。
因此,它们本来就不是矛盾的。
const volatile int = 10没有任何问题。
extern
表明变量或者函数的定义在别的文件中
struct
一个空的结构体sizeof一般来讲为1,当然可能也为0
柔性数组
struct st_type{ int i; int a[];}type_a;
union
在union中所有成员公用一个空间,这就涉及到了大小端模式
在此不实际拓展开来
enum
枚举常量,当然常量也是可以被赋值得
- 宏常量在预编译阶段只是简单替换;枚举常量测试在编译的时候才确定其值
- 一般在调试器里面,可以调试枚举常量,但不能调试宏常量
- 枚举可以一次定义大量相关的常量,宏常量只能定义一次
typedef
为已经存在的数据类型取个别名
typedef取的别名不支持类型拓展
typedef int int32
unsigned int32 j=32会报错
- 带你玩遍c语言(1)关键字
- 3131字带你进阶C语言中的关键字.md
- 1--C语言关键字
- C语言(关键字)
- 带你了解C语言指针
- 带你一起学习C语言语法
- 第二遍C++primer->关于关键字extern,
- C语言关键字学习(1)----- extern
- 带你玩转Github
- 带你玩转二维码
- 带你玩转 UIAlertController
- 【Albert带你1小时看遍美国前沿科技与商业运作】微访谈精选
- wing带你玩转自定义view系列(1) 仿360内存清理效果
- 带你快速玩转canvas(1)上手和染色
- 带你玩转超级列表框(1-4)雪山灵狐
- 带你玩-Object Tracking using OpenCV (一)
- 带你玩-Object Tracking using OpenCV (二)
- 带你玩转Visual Studio 系列 (转载)
- vivado与modelsim的联合仿真(二)
- Linux下Anaconda安装tensorflow-gpu
- iOS开发:开发过程中单例模式的使用
- 彻底征服 Spring AOP 之 理论篇
- centos系统性能监控常用软件介绍
- 带你玩遍c语言(1)关键字
- Java事物
- RecyclerView的demo
- 编译RT288X SDK安装mksquash_lzma-3.2报错
- 计算机编码模式
- scroll实现上拉加载,下拉刷新,轮播图效果
- Eclipse如何给web项目打war包
- Material Design之底部导航栏
- c++远航之const