c语言的问题与答案

1.static的全局变量与普通全局变量的区别?static的局部变量与普通局部变量的区别?static定义的函数与普通函数的区别?

        static主要在三个方面不同:作用域、存储区域

        static的全局变量与普通全局变量的区别

        全局变量(外部变量)之前加上static就变成static全局变量。

        都存在于静态数据区。两者的主要区别在于作用域不同,在源程序中,普通全局变量在其他源文件是可以使用的,但是static全局变量的作用域仅限于定义的源文件内。

     static全局变量只初始化一次。

       static局部变量与普通局部变量的区别

       static局部变量 存在于静态数据区,而普通局部变量存在于栈中,动态申请的变量存在于堆中。static局部变量,只初始化一次,下一次函数运行时,还保存着上一次的值,而普通局部变量重新初始化。

      static定义的函数与普通函数的区别

       static函数与普通函数的区别在于作用域不同。static函数仅限于被源文件中其他函数调用。其他没有定义该static函数的源文件是不能使用的。

      static函数只存在一份,普通函数在调用时维持一份拷贝。

2.static的作用至少说出两条

       1)信息隐藏的功能

               在一个源程序中,所有头文件和源文件都是可见的,而使用static,可以有隐藏功能

       2)保持变量的持久性,因为存在静态数据区,在一个函数体内,作为一个静态的局部变量,即使函数已经用完,但是下次值还是可以继续使用

       3)static作用默认初始化为0。其实静态数据区都是默认0。

3.struct与union有什么区别,以及应用场景

          struct的成员都有独立的地址空间,地址空间的长度为每个成员长度的总和,当改变一个成员时,只改变该成员的值。用途非常广泛,表示一个对象,有很多属性的时候

          union的成员是共享地址空间的,地址空间的长度为长度最大的成员的长度值,当改变时,值为最后一次成员改变的值。主要应用于嵌入式的寄存器控制,或者一个需要节省内存的时候。

4.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
    答:可以,在不同的C文件中以static形式来声明同名全局变量。
    可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

5.说出几种方式死循环

         第一、 for(;;);

        第二、while(1){}

        第三、LOOP:

                           goto LOOP;

6. #ifndef 与 #pragma once的区别

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。

#pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

方式一由语言支持所以移植性好,方式二 可以避免名字冲突

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值