c语言读书笔记

c语言知识

引自《c专家编程》

1.c语言数据类型
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;

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值