C专家编程

1.NUL和NULL的区别

    NULL代表指针不指向任何地方,NUL是代表字符串的结尾。字符串以’\0'结尾,NUL是'\0'的一个宏,需要自己定义

2switch中没有任何符合条件的case的情况怎么处理?

    有default则运行default,没有则整个switch什么都不做

3 默认缺省关键字的函数是全局可见吗

    void fun1(){...}这样的函数是全局可见的,任何链接到它所在文件的任何东西都可以看到它,所以extern根本可以不用加,只需要加static,确保它只能在本文件可见。

4.C中的声明可能非常复杂,解析声明需要用到神奇的解码环,具体看下面链接

    https://www.cnblogs.com/cuckoos/articles/5247125.html

    个人看法,主要分三步

    1.先找到最左侧的标示符

    2.先和右侧结合,再和左侧结合

    3.结合的时候遇到括号停止

5.typedef 用于简洁的表示指向其他东西的指针

    typedef  int   int32_t;

    typedef void(*ptr_to_func)(int);  定义ptr_to_func标示符为一个函数指针,指向返回void,参数是int的函数

    相比define,typedef是彻底的封装,不可以进行扩展

    typedef int banana;

    unsigned banana x;  非法!

6.数组名到底是不是左值?

    数组名是左值,但是它是不可修改的左值.意思是不能把数组名作为赋值对象。

    *(a+1)=100;然而这样的赋值还是可以的,因为赋值的对象不是简单的数组名

7.数组和指针的关系

    1.所有作为函数参数的数组,都被C当成了指针,这是出于效率的考虑。传递一个首地址进去比赋值一整个数组要简单。

    2.在表达式中的数组名就是一个指针

    3.C把数组的下标当做指针的偏移量

    实际上,只有在一个文件声明问指针,另一个文件定义为数组的情况下,会发生冲突。

 8 C中为什么不对数组下标访问做越界检测?

    没有意义,因为对数组的访问可以通过指针和下标实现,可以杜绝下标访问越界,但是不能杜绝指针越界。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值