📜  C编程面试常见问题套装2

📅  最后修改于: 2021-05-25 20:24:43             🧑  作者: Mango

这篇文章是第二套C编程面试常见问题解答。套装1
C语言的主要特征是什么?
C是一种过程语言。 C语言的主要功能包括对内存的低级访问,简单的关键字集和简洁的样式。这些功能使其适用于诸如操作系统或编译器开发之类的系统编程。

i ++和++ i有什么区别?
1)表达式“ i ++”返回旧值,然后递增i。表达式++ i递增该值并返回新值。
2)后缀++的优先级高于前缀++。
3)后缀++的关联性从左到右,前缀++的关联性从右到左。
4)在C++中,++ i可用作左值,但i ++不能用作左值。在C语言中,它们都不能用作l值。
有关更多详细信息,请参见++ * p,* p ++和* ++ p之间的区别。
什么是l值?
l值或位置值是指可以在赋值运算符左侧使用的表达式。例如,在表达式“ a = 3”中,a是l值,而3是r值。
l值有两种类型:
“不可修改的l值”表示无法修改的l值。 const变量是“不可修改的l值”。
“可修改的l值”表示可以修改的l值。
有关详细信息,请参考C语言中的左值和右值。
数组和指针有什么区别?
请参见数组与指针
如何编写自己的sizeof运算符?

c
#define my_sizeof(type) (char *)(&type+1)-(char*)(&type)


C
/* Prints numbers from 1 to n */
void printNos(unsigned int n)
{
  if(n > 0)
  {
    printNos(n-1);
    printf("%d ",  n);
  }
}


C
#include 
int main(void)
{
    const volatile int local = 10;
    int* ptr = (int*)&local;
    printf("Initial value of local : %d \n", local);
    *ptr = 100;
    printf("Modified value of local: %d \n", local);
    return 0;
}


有关更多详细信息,请参见实现您自己的sizeof。
在不使用循环的情况下,如何打印从1到100的数字?
为此,我们可以使用递归。

C

/* Prints numbers from 1 to n */
void printNos(unsigned int n)
{
  if(n > 0)
  {
    printNos(n-1);
    printf("%d ",  n);
  }
}

什么是volatile关键字?
volatile关键字旨在防止编译器对可能以编译器无法确定的方式进行更改的对象进行任何优化。
声明为volatile的对象从优化中被省略,因为它们的值可以随时通过当前代码范围之外的代码来更改。有关更多详细信息,请参见了解C中的“易失”限定符。
变量可以同时为const和volatile吗?
是的,const表示无法为变量分配新值。该值可以由其他代码或指针更改。例如,以下程序可以正常运行。

C

#include 
int main(void)
{
    const volatile int local = 10;
    int* ptr = (int*)&local;
    printf("Initial value of local : %d \n", local);
    *ptr = 100;
    printf("Modified value of local: %d \n", local);
    return 0;
}
  • 在C上练习测验
  • C篇
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。