c语言读书笔记
程序员文章站
2022-07-14 20:45:33
...
c语言知识
引自《c专家编程》
1.c语言数据类型
short -- short int(短整型)
long -- long int(长整型)
2.switc 中的 break 到底中断了什么?
switch(line) {
case THING1:
doitl1();
break;
case THING2:
if (x == STUFF) {
do_frist_stuff();
if (y == OTHER_STUFF) {
break;
doinl2();
}
//代码break的意思是跳到这里
init_module_pointer();
break;
case THING3:
...
}
}
上面的代码是想跳出if然后继续执行init_module_pointer()但是并不是这样,而是直接跳出了switch并未初始化
c 语言中的const只是类型约束,并非真正的常量
void func(void)
{
const int a;
switch() {
case a:
...
break;
...
default:
...
break;
}
}
这样是会报错的,因为a并非真正的常量,case后需要跟常量
3.c 语言函数中buf的传递
char *getTime(void)
{
char buf[120] = {0};
...
获取time
...
strcpy(buf, timebuf, 120);
return buf;
}
在上面的这种用法中获取time并打印后获得的值是错误的,因为在栈中自动分配的buf在函数调用结束后就会被释放,所以我们实际得到的缓冲区指针早已不知指到了哪
/*或许我们可以用malloc的方式获得一块buf, 但是这样需要自己来管理内存,很容易出现忘记free的情况*/
char *getTime(void)
{
char *buf;
buf = malloc(120 * sizeof(char));
...
获取time
...
strcpy(buf, timebuf, 120);
return buf;
}
所以我们可以引用一些标准函数的方法,让用户自己传入buf
static char *getTime(char *buf, int len)
{
/*传入长度以做一些判断,看长度是否够用*/
...
获取time
...
strcpy(buf, timebuf, 120);
return buf;
}
int main(int argc, char **argv)
{
char buf[120] = {0};
getTime(buf, sizeof(buf));
return 0;
}
char *ptr = “Hello World!”; //字符串指针是常量,不可重新赋值
4.数组和指针并不相同
1>定义和声明的区别
定义只能有一次,比如 int a;
声明可以多次声明,比如在其他文件中引用变量 extern int x;
上一篇: 《R语言实战》学习笔记:第三章 图像初阶
下一篇: R语言实战笔记 多项式回归