拾遗
1.static和const区别
const的意思是“常量”,也就是说变量一旦被定义就不能被修改,即是说变量是一个右值。
static的意思有两层。第一层是当它作用在函数名或者全局变量上时,这时static关键字会把这两者的extern链接属性修改为internal。第二层是当static作用在局部变量上时,存放这个局部变量的内存空间在被定以后就不会释放,哪怕重新定义这个变量也不行,直到程序结束内存才会释放。
2.左值和右值
定义:lvalue(locator value)代表一个在内存中占有确定位置的对象(换句话说就是有一个地址)。 rvalue通过排他性来定义,每个表达式不是lvalue就是rvalue。因此从上面的lvalue的定义,rvalue是在不在内存中占有确定位置的表达式。
根据以上定义,右值没有一个确定的内存空间与之对应,所以没有办法赋值。
3.链接属性和作用域的区别和联系
linkage是针对声明而言的,只有三种:
external,可以同时在多个文件中声明,表示同一个对象或函数
internal,可以在本文件中声明多次
none,只能声明一次
编译器确定标识符的 linkage 的时候会考虑到标识符所在的 scope ,但是和scope不是一回事。linkage不用多文件编译的话用不着。
4.函数可变参数
#include<stdio.h>
#include<st