C语言知识点小总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44880138/article/details/102644429

定义和声明

定义和声明的最大区别在于:

定义创建了变量(对象)并为这个对象分配了内存。
声明:只是告诉编译器这个变量名被提前预定了

关键

register 要求编译器尽可能的将变量放在CPU内部寄存器中,而不会是通过内存寻址访问以提高效率。

break 可以跳出所有循环 。 do while . while . for

循环语句的主要点,建议把最长的循环放在最内层,最短的循环放在最外层,减少少CPU跨切循环层的次数

void 真正发挥的作用在于
对函数返回的限定
对函数参数的限定

void *,任何类型的指针都可以直接赋值给他无需强制转换;

void *p1;
int *p2;

p1 = p2; 	//正确
p2 = p1;	//错误

如果函数没有返回值,那么声明应该为 void 类型。
在C语言中,凡是不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是很多时候都被误以为void

void 指针

使用void 指针类型要非常小心。
按照 ANSI(American National Standards Institute) 标准,不能对void指针进行算法操作,

void * pvoid;
pvoid++; 	//不合法
pvoid += 1; //不合法

原因是:ANSI认为进行算法操作的指针必须是确定知道其指向数据类型大小的,也就是说必须知道内存目的地址的却切值。

GNU 却认为 void* 的算法操作和 char * 一致

void * pvoid;
pvoid++; 	//合法
pvoid += 1; //合法

如果函数的参数可以是任意类型的指针,那么应声明其参数为void*
例如内存操作函数 memcpy()和memset()

void * memccpy(void* dest,const void *src,size_t len);
void * memset(void * buffer, int c, size_t num);

void 不能代表一个真实的变量,因为定义变量时必须分配内存空间。

void a // error
function(void a);// 错误

局部变量,位于栈内存中,在函数结束后,就被释放

const

const 也许被称为 readonly才对 只读变量

修饰一般变量

int const i = 2;const int i = 2; //都可以

修饰数组

int const a[5] = {1,2,3,4,5};const int  a[5] = {1,2,3,4,5};

修饰指针

const int *p ; 		//p可变,P指向的对象不可变
int const *p ; 		//p可变,P指向的对象不可变

int *const p;		// p不可变,P指向的对象可变
const int *const p;	//指针p和P指向的对象都不可变

记忆方法,先忽略类型名,(编译器解析的时候也是忽略类型名的)
const 离那个近,就修饰谁,谁就不可以改变

在这里插入图片描述

const 修饰函数参数,起到保护作用,避免参数被函数体内意外改变。

void Fun(const int i);//i 在函数体中不能被改变。

const 修饰函数的返回值,这样返回值不可被改变,达到保护的目的。

例如 
const intFun(void);

在另一文件中引用const只读变量:

extern const int i;	//正确的声明
extern cons int j = 10; // 错误,只读变量不能被改变

猜你喜欢

转载自blog.csdn.net/weixin_44880138/article/details/102644429