您的位置:首页 > 其它

C和指针 阅读笔记

2017-12-22 10:24 120 查看
EOF: END OF FILE :文件结束标记;

http://www.ruanyifeng.com/blog/2011/11/eof.html

int a: int *a和int a是相同的但是后者会造成误解int* a,b,c;应写成int *a,*b,*c。

用typedef来创建新的类型名而不是用#define,#define不能正确的处理指针类型,如下例中bc就会声明失败,而更复杂的函数指针,数组指针明显typedef更合适。

#define p char *
p a,b,c;


声明常量有两种方式:const , #define。

const 是不可变的变量,其内容遵循变量的格式要求,应用场景是变量的应用场景,#define 是字面值替换,其内容可以更丰富除了简单的替换外还可应用于(宏的单行,多行定义,函数定义,条件编译,头文件声明等领域中)

http://blog.csdn.net/benny5609/article/details/2314541

const 常量只有一份,给的是对应的内存地址而#define 是立即数会有多份拷贝,存在内存浪费。

const 替换不会出现#define替换中的神奇错误,当然这些错误大多出现在const不能应用的字面值替换的场合。

const: int const a ; const int b;

int const p; int const p; int const * const p;

const 可作为函数形参对传入参数进行限定,提醒编写和使用者,同时也是函数重载的不同条件之一。

变量有三种类型:静态,自动,寄存器变量;

变量有三个地方存储:普通内存,运行时堆栈,硬件寄存器;

标志符(函数,变量)具有三种链接属性:external,internal,none;

作用域包括:代码块,文件,原型,函数;

static: 代码块外的static用于将标志符的链接属性改为internal(只能内部访问);代码块内部的用于修改变量类型,将自动变量改为静态变量。

C语言没有赋值语句,只有赋值操作符,赋值和+-一样在表达式内完成,表达式+’;’成为语句,所以y+3;是正常而无用的。printf()也是如此执行有用的函数过程,结果被忽略。(副作用)

代码块允许在一条语句的地方出现多条语句,C语言没有bool类型,0为假,非0为真。

else子句归属于最近的不完整if语句。不要被奇怪的缩进迷惑。

for(s1;s2;s3){p;}和 s1;while(s2){p;s3;}基本等价,不同在于continue语句,for不会跳过s3,while会。

a=b=c+3; a,b并不能说被赋了同样的值,处于变量类型的考虑,b可能会截断c+3; 一个例子是,例子中读取值被ch截断而很难和EOF相同。

char ch;
正确:while(ch=gerchar() != EOF);
错误:while((ch=gerchar()) != EOF);


大多数情况下 a +=1和a=a+1是相同的,乃至优化上也类似;

但考虑a[f(x)] +=1;和a[f(x)] = a[f(x)] +1;

前者只计算一次下标,后者会计算两次,当f(x)不具有副作用时,前者效率更高;当f(x)具有副作用时,前后两者可能不同。

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