您的位置:首页 > 其它

C 03 关键字:const extren if等

2013-12-31 14:21 253 查看
1.const 只读

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n = 5;
const int* p = NULL;
p = &n;
*p = 10; //!OOPS   *p read-only

int* const p2 = &n;
int n2 = 100;
p2 = &n2;//!OOPS p2为常量const指针

return 0;
}


1 const本质为只读变量所以我们还是可以通过取得它的地址来改变它的值 这是欺骗编译器的做法 并且部分有效 不建议这么做

eg:

const int num_new = 5;

int *p =(int*)&num_new;

*p = 68;


2 const修饰的指针:

左数右指 分清指针指的数据不变还是指针本身不变



const int *p; // p可变 p指向的内容不可变

int const *p; // p可变 p指向的内容不可变

int* const p; // p不可变 p指向的内容可变

const int* const p; // p可变和p指向的内容不可变即:


当const出现在*号左边时指向的数据为常量 当const出现在*号右边时指针本身为常量

我的理解:p代表了指针本身所以 const p自然就是p本身不能变 *p代表所指的内容 自然 const *p就是所指的内容不能变



3 const修饰函数
const修饰函数参数时表示在函数体内部参数的值只读
const修饰函数返回值表示返回值不可改变 多用于返回指针的情形

4 const 修饰成员函数(C++)表示在这个函数中该对象所代表的内存只读或者可以理解为该对象对应的变量只读

2.使用extern 来引进外部变量和类

3.使用static定义变量和函数时会将变量限制在文件内部 文件作用域限定符外部不能通过extern来访问 我们可以使用定义函数来间接的访问static的变量

4.if使用需注意:
1 bool型的变量直接出现于条件中 不要进行比较
2 普通变量和0值比较时,0值应该出现在比较符号左边(工程经验) 工程中禁止比较时将值作为右边的数

int num = -1;
if(0 == num) // 正确的写法
if(0 = num)  // 少一个=无法通过编译
if(num == 0) // 工程中禁止的做法
if(num = 0)  // 少了一个=也能通过编译
{

printf("Hello world!\n");

}
else
{
printf("else\n");
}


3 float型变量不能直接和0进行比较,需要定义精度 来自:《C语言深度剖析》一书:http://pan.baidu.com/s/1kToJU3H



4 0和非0表示false和true与1无关 bool型变量都是不同的厂家自己定义的





5.switch-case-break-default
每个case必须有break否则会导致分支重叠 default最好有 用来处理特殊情况

6.一般函数的设计
统一的资源分配 malloc 执行函数语句 统一的释放资源free

7.void指针的意义
c语言只有相同类型的指针才可以相互赋值 void*指针作为左值用于接收任意类型的指针

8.volatile
多用于多线程的编程告诉编译器不要做优化 必须访问内存 老实点

C/C++ Volatile关键词深度剖析:http://hedengcheng.com/?p=725

9.使用union来判断系统的大小端

typedef union data
{
char c[2];
unsigned short s;
}data_t;

//c语言中无参数的函数要加void否则会认为是任意类型的参数 c++则不必默认为void
int main(void)
{
point_t point1 = {1, 4};
circle_t circle1 = {1,4,5};
circle_t circle2 = {{3,4},5};

data_t x;
x.s = 0x0102;
if(x.c[0] == 2 && x.c[1] == 1)//是否是小端字节序
{
printf("little endian\n");
}
else
{
printf("big endian\n");
}
printf("size=%d\n", sizeof(test_t));

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: