变量/函数的声明和定义之间有什么区别
答:变量/函数的声明仅声明变量/函数存在于程序中的某个位置, 但未为其分配内存。但是变量/函数的声明起着重要的作用。这就是变量/函数的类型。因此, 在声明变量时, 程序会知道该变量的数据类型。在声明函数的情况下, 程序会知道该函数的参数是什么, 它们的数据类型, 参数的顺序以及函数的返回类型。这就是声明。关于定义, 当我们定义变量/函数时, 除了声明的作用外, 它还为该变量/函数分配内存。因此, 我们可以将定义视为声明的超集。 (或声明作为定义的子集)。
//这只是声明。 y未通过此语句分配内存
extern int y
//这既是声明又是定义, 此语句分配给x的内存。
int x;
C中有哪些不同的存储类说明符?
答:auto, register, static, extern
变量的作用域是什么?变量在C语言中是如何作用域的?
答:变量的作用域是程序中变量可以直接访问的部分。在C语言中,所有标识符都是词汇(或静态)作用域。查看更多细节。
不使用分号, 你将如何打印" Hello World"?
答:
#include <stdio.h>
int main( void )
{
if ( printf ( "Hello World" )) {
}
}
什么时候应该在C程序中使用指针?
1.获取变量的地址
2.为了在C中实现引用传递:指针允许不同的函数共享和修改其局部变量。
3.传递大型结构,以避免结构的完整复制。
4.实现“链接”数据结构,如链表和二叉树。
什么是NULL指针?
答:NULL用于指示指针未指向有效位置。理想情况下, 如果在声明时不知道指针的值, 则应将指针初始化为NULL。另外, 当指针所指向的内存在程序中间被释放时, 我们应该使指针为NULL。
什么是悬空指针?
答:悬空指针是不指向有效存储位置的指针。当删除或释放对象时, 如果不修改指针的值, 就会出现悬挂指针, 因此指针仍然指向释放后的内存的存储位置。以下是示例。
//EXAMPLE 1
int * ptr = ( int *) malloc ( sizeof ( int ));
.......................... free (ptr);
//ptr is a dangling pointer now and operations like following are invalid
*ptr = 10; //or printf("%d", *ptr);
//EXAMPLE 2
int * ptr = NULL
{
int x = 10;
ptr = &x;
}
//x goes out of scope and memory allocated to x is free now.
//So ptr is a dangling pointer now.
什么是内存泄漏?为什么应该避免
答:
当程序员在堆中创建内存而忘记删除它时, 就会发生内存泄漏。对于诸如守护程序和服务器之类的程序而言, 内存泄漏是特别严重的问题, 根据定义它们永远不会终止。
/* Function with memory leak */
#include <stdlib.h>
void f()
{
int * ptr = ( int *) malloc ( sizeof ( int ));
/* Do some work */
return ; /* Return without freeing ptr*/
}
什么是局部静态变量?它们有什么用?
答:
局部静态变量是一个变量, 其生存期不会以声明它的函数调用结尾。它延长了整个程序的寿命。所有对该函数的调用都共享局部静态变量的相同副本。静态变量可用于计算调用函数的次数。另外, 静态变量的默认值为0。例如, 以下程序输出" 0 1"
#include <stdio.h>
void fun()
{
//static variables get the default value as 0.
static int x;
printf ( "%d " , x);
x = x + 1;
}
int main()
{
fun();
fun();
return 0;
}
//Output: 0 1
什么是静态函数?它们有什么用?
答:
在C语言中, 默认情况下函数是全局的。函数名称前的" static"关键字使其变为静态。与C中的全局函数不同, 对静态函数的访问仅限于声明它们的文件。因此, 当我们想限制对函数的访问时, 我们将它们设为静态。使函数成为静态的另一个原因可能是在其他文件中重用了相同的函数名。
有关示例和更多详细信息。
- C编程面试常见问题S2
- 实践测验在C上
- C文章
你也许也喜欢:
C编程面试常见问题S2
Java编程面试常见问题S1
亚马逊最常问的面试问题
微软最常问的面试问题
埃森哲最常见的面试问题
OOP面试常见问题
常见C++面试问题
DBMS面试常见问题S1
DBMS面试常见问题S2
常见操作系统面试问题S1
数据结构面试常见问题。
常见算法面试问题
常见的计算机网络面试问题
面试问题中的十大算法
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。