summary of pointers on C.txt

本质上,所有传递给函数的参数都是按值传递的。
字符串就是一串以NUL字节结尾的字符,NUL是字符串终结符,它本身不是字符串的一部分,但是要占存储空间, “hello”占6个字节的内存空间
scanf的函数原型中标量参数的前面加个‘&’, 为什么, 因为这是传了一个地址, 要不程序会不知道把那个值存储到什么地方
EOF是个整形值
指针常量/非指针常量
指向常量指针 char const *p = “hello”;
int const *pi == const int *pi 指向常量的指针,你可以修改该指针的值但不能修改它所指向的值
int *const cpi  cpi是一个指向整形的常量指针。此指针为常量,它的值无法修改,但你可以修改它所指向的整形的值
int const * const ccpi
作用域,文件作用域,函数作用域,代码块儿作用域和原型作用域
代码块使用就近原则
变量的存储类型(strorage class)指的是存储变量的内存类型,变量的存储类型决定变量何时创建,何时销毁及他的值能保持多久。有三个地方可存储变量: 普通内存,运行时堆栈,硬件寄存器。声明位置决定缺省存储类型。
具有external链接属性的实体成为global实体,所有源文件中的所有函数均可访问。只要变量并非声明与代码块或函数定义内部,缺省情况下的链接属性即为external。如果一个变量声明于代码块内部,在其前面添加extern关键字使它所引用的是全局变量而非局部变量。
具有external链接属性的实体总是具有静态的存储类型。全局变量在程序开始前创建,在程序的整个执行过程中始终存在。从属于函数的局部变量在函数开始执行时创建,执行完毕后销毁,但用于执行函数的机器指令在程序的生命期一直存在。
局部变量在函数内部使用,需要时分配内存,减少内存的总需求量,在堆栈上分配可以实现递归
为什么不合法 ++a = 35,因为++a是a值得拷贝,而不是变量本身,所以无法赋值
&& || 短路求值
条件操作符有什么好处
逗号表达式的好处
array[下标] = *(array + (下标)) ,所以说下标引用操作和间接访问表达式是等价的,实际上下标表达式就是用后面这种形式实现的
函数调用操作符
0为假,任何非零为真
指针,
内存中的每个位置有一个独一无二的地址标示
内存中的每个位置都包含一个值

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *