C语言1关键字与符号
来源:互联网 发布:淘宝网天猫秋季女装 编辑:程序博客网 时间:2024/05/24 01:56
auto即C语言中局部变量的默认属性,编译器默认所有的局部变量都是auto,它存储在程序的栈中
static修饰的局部变量存储在程序静态区。所以这个变量不在栈上,调用函数的时候这个变量不会因为函数运行结束,栈被释放而释放。它修饰的变量只会被初始化一次。
register指明将变量存储于寄存器中。由于寄存器是有限的,所以register只是请求寄存器变量,但不一定请求成功。必须满足以下条件:
1、 register变量的必须是CPU寄存器可以接受的值
2、 不能用&运算符获取register变量的地址。因为它存储于寄存器,所以不可能有内存里的地址。
从寄存器中取值会比从内存中取值要快的多,所以一般在实时性系统中运用寄存器变量。对频繁调用的函数和速度要求高的程序一般也使用寄存器变量。
void修饰函数返回值和参数仅为了表示无,所以不知道内存里void是多大的别名
void指针的意义:
1、 C语言只有相同类型的指针才可以相互赋值
2、 void*指针作为左值用于“接收”任意类型的指针
3、 void*指针作为右值赋值给其他指针时需要强制类型转换
sizeof不是函数,是个关键字
const修饰指针——左数右指:当const出现在*号左边时指针指向的数据为常量,当const出现在*号右边时指针本身为常量
const int*p; // p可变,p指向的内容为常量
int const*p; // p可变,p指向的内容为常量
int* const p; //p为常量,p指向的内容可变
const int*const p; //p和p指向的内容都为常量
const修饰函数参数表示在函数体内不允许被改变,修饰函数返回值表示返回值不可改变,多用于返回指针的情形
volatile:用于告诉编译器必须每次去内存中取变量值,主要修饰可能被多个线程访问的变量,也可以修饰可能被未知因素更改的变量,下面举例说明:
int obj = 10;
int a = 0;
int b = 0;
a = obj;
sleep(100);
b = obj;
这种情况下,a和b都会被赋值为10,假如在sleep(100);内产生了一个硬件中断,中断处理程序改变了obj里的值,但是b还是10。这样就可能出错。
这时只要这样写volatile int obj= 10;就可以每次都去内存中取值了。
struct中的每个域在内存中都独立分配空间
union只分配最大域的空间,所有域共享这个空间,它的使用受系统大小端的影响(低位在高字节为大端模式,小端你懂得)
typedef用于给一个已经存在的数据类型重命名,不是重定义的操作,没有产生新的类型,typedef重定义的类型不能进行unsigned和signed扩展
你知道下面哪些注释是正确的吗?
A) int/*…*/i;
B) char* s=”abcdefgh //hijklmn”;
C) //Is it a \
valid comment?
D) In/*…*/ti;
答案:前三个是正确的,编译器对注释用一个空格代替。注释符合在双引号之间就是一个普通的符合。
编译器将/*作为一段注释的开始,把/*后的内容都当成注释内容,直到*/出现为止。
接续符(\)表示这行还没结束,后面的内容也是这一行的。
编译器会将\剔除,跟在反斜杠后面的字符自动接到前一行;在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前不能有空格;接续符适合在定义宏代码块时使用
宏代码块的定义:
#define SWAP(a,b)\
{ \
inttemp=a; \
a=b; \
b=temp; \
}
可以定义一个这样的宏,方便代码的阅读。
逻辑运算符使用分析
||从左向右开始计算,当遇到为真的条件时停止计算,整个表达式为真;所有条件为假时表达式才为假。
&&从左向右开始计算,当遇到为假的条件时停止计算、整个表达式为假;所有条件为真时表达式才为真。
三目运算符(a?b:c)当a的值为真时,返回b的值;否则返回c的值
- C语言1关键字与符号
- C语言符号及关键字详解
- c语言符号与优先级
- C语言__typedef关键字与const关键字
- 1--C语言关键字
- C语言常量与符号常量
- C语言中的强符号与弱符号
- C语言的弱符号与强符号
- C语言中的强符号与弱符号
- C语言中的有符号数与无符号数
- C语言中的强符号与弱符号
- C语言中的强符号与弱符号
- C语言中的强符号与弱符号
- C语言中的强符号与弱符号
- C语言中的强符号与弱符号
- C语言中的强符号与弱符号
- c语言笔记1-关键字
- C语言基本概念以及关键字与标识符
- UVA - 442 Matrix Chain Multiplication
- spring2.5 mvc 以及spring3.0 mvc ajax+json
- UVa 11375 - Matches (递推 JAVA 高精度)
- 二分查找 java
- 【学生信息管理系统】总结--这只是个开始
- C语言1关键字与符号
- linux下svn无法提交,svn ci无任何反映的问题
- 网络命令一览表
- Linux下C++程序常用编译命令
- Java线程(六):线程池
- Response.Redirect与Server.Transfer区别
- JAVA获取访问用户的客户端IP(适用于公网与局域网)
- UVA - 12316 Sewing Buttons with Grandma (有重复元素的组合)
- eclipse导入Android工程出错:eclipse failed to read the project description file