- 字符串比较不能直接用== ,要用strcmp.
- 用strcmp时注意当相等时,返回0,在if语句中为不进入.
- 用gets才能读入带空格的字符串,scanf遇到空格,回车,TAB认为输入结束.
但是因为gets不检查放入的变量的内存是否能够容纳输入的数据, 换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界,所以编程时建议使用 fgets()。 - 用gets和scanf("%c",&x)时,注意要用getchar()吃掉缓冲区的回车.
- 定义一个指针,要么让它指向某个变量, 要么给它动态分配内存.不要直接使用!
因为没有初始化的指针指向的是一个未知的内存地址. - 字符数组只有在定义时才能将整个字符串一次性的赋值给它,一旦定义完了,就只能一个字符一个字符的赋值了.例如:
char str[7];
str = "hello"; //错误
//正确
str[0] = 'a'; str[1] = 'b'; str[2] = 'c';
str[3] = '1'; str[4] = '2'; str[5] = '3';
- 除了字符数组,C语言还支持另外一种表示字符串的方法,就是直接使用一个指针指向字符串,例如:
char *str ;
str = "xxxx"; //正确
或者
char *str = "xxx";
- 指针数组的输入操作,需要先动态分配内存给指针.
char *string[10] = {NULL};
for(i = 0; i < 10; i++) {
string[i] = (char *)malloc(sizeof(char)*20);
scanf("%s", string[i]);
}
- float 的有效数字范围为7位有效数字
double的有效数字范围为15~16位有效数字
这里的有效数字范围包括小数和小数点前的数,
例如:3.14 是3位有效数字 - 默认情况下, 编译器会把一个小数当做double类型
如果写成float x = 3.14;
则编译器会把double类型转换为float类型, 多做一步转换
所以一般 float x = 3.14f; - C语言内存布局: