标签:c编程
单引号本质代表引用一个数字,而双引号本质上代表一个指针。
printf(‘\n’)在当今大多数编译器非法。
a+++++b的解法:
这种写法应当有一个最合理的解释:
a++ + ++b
但是编译器执行的是大嘴编译法,对于编译器至少看上去应当为:(((a++) ++) +b),但是一个常量不允许++操作,
所以这个语句反而成为了非法语句。
以下是一个测试是否可以嵌套注释的语句,如果可以嵌套则返回1,不然就返回0,可以试试。
/*/*/0*/**/1 1 0
各个类型指针大小在64位系统大小均为8字节
#include<stdio.h> #include<string.h> int main() { int *a; char *b; short *c; long *d; printf("int=%d char=%d short=%d long=%d\n",sizeof(a),sizeof(b),sizeof(c),sizeof(d)); return 0; }
在双目运算符中算术运算符优先级最高,移位运算符次之,关系运算符再次之,接着是逻辑运算符,赋值运算符,最后是条件运算符。
Switch语句的case,与dafult的位值问题,及break 的遗漏问题
f ; 这个语句其实计算了函数的地址
else注意与if 的匹配问题
数组允许在最后多余的逗号
sizeof运算符可以计算数组的长度除以类型就是数组元素的个数。
#include<stdio.h> int main() { int a[]={1,2,3,4,5,6}; int b=(sizeof(a)/sizeof(int)); printf("%d\n",b); return 0; }
对于数组我们只能做两件事:确定数组的长度,获得指向下标为0的元素
任何一个数组下标运算都等同于与一个对应的指针运算。
任何指针都是指向某种类型的变量
指针相加是无意义的,如果在同一个数组只有减法是有意义的
数组名是一种指向数组的指针,它是有类型的不可以与其他类型指针赋值
非数组的指针,字符串其实代表了本身字符加一个结束字符,在内存中是一个地址,当使用str系列函数是请确保已有的字符串是已经分配内存的。
malloc()函数使用时注意:1.判定成功分配,2.及时释放已经分配的空间
声明的一个指针和一个数组是两个完全不同的东西
空指针并非空字符串
Static关键字的使用:
1.在修饰变量时,将变量的作用域限制在源文件或者局部子函数中。
2.在修饰函数时,限定作用域减少名字冲突
注意函数的返回值,最好在声明与定义时写好函数的返回类型,参数类型减少不必要的麻烦
检查外部类型,
eg:
extern int n;
long n;
这是一个无效的程序,同一个没有被限制的变量被声明成两个不同的类型
一般请显示的定义main()函数的返回值
#define max(a,b) ((a)>(b)?(a):(b))
尤其在函数调用时注意各参数的类型提升
注意内存位置为0
一般计算机不允许读取内存地址0;
#include<stdio.h> int main() { char *p; p = NULL; printf("Location 0 countion %d\n",*p); return 0; }这个程序因为不能访问地址0,所以会产生段错误。
注意不对称边界问题单引
标签:c编程
原文地址:http://blog.csdn.net/zmrlinux/article/details/45339261