C语言基本知识6

1.简述Makefile的作用
Makefile是一种工程的编译方法,它拥有非常强大的组织流程的能力。
Makefile 通常是和 make 命令一起配合使用,很多大型项目的编译都是通过 Makefile 来组织的。 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系将会非常复杂。make是一个命令工具,它解释Makefile 中的指令(规则)。
Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。
Makefile带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

2.sizeof与strlen的区别:
sizeof是运算符,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间(字节数),其值在编译时就已经计算好了
strlen是函数,它的功能是计算字符串的长度,该长度不包括字符串结束标志’\0’

3.什么是野指针?如何避免野指针。
指向一个已删除的对象或指向未申请的访问受限内存区域的指针称为野指针。
定义时对指针进行初始化,指明其指向

4.c语言分配内存的方式有哪些?
c语言中常见的内存错误有哪些?
分配方式:静态分配和动态分配
常见错误:
1)指针没有指向一块合法的内存
2)为地址分配的内存太小
3)内存分配成功,但并未初始化
4)内存越界
5)内存泄漏
6)内存已经释放,但还通过指针调用

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

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

非静态全局变量的作用域是整个源程序,而静态全局变量其作用域受限,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

static函数与普通的函数作用域不同,前者尽在本文件中。
static函数与普通函数最主要区别是static函数在内存中只有一份,普通静态函数在每次被调用中维持一份拷贝程序的局部变量存在于堆栈中

6.#include <> 和 #include “” 有什么区别?
<>先去系统目录中找头文件,如果没有在到当前目录下找。所以像标准的头文件 stdio.h、stdlib.h等用这个方法。
而""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录中定义的。

7.char *const p; char const *p; const char *p 三者的区别。
char *const p:指针p的值不可修改,即指针是常量,但指针指向的内容是变量
char const *p:指针p所指向的单元的内容不可修改
const char *p:指针p指向的内容是常量
后面两者意思相同

8.写一个 宏MIN,这个宏输入两个参数并返回较小的一个。
另外,当你写下面代码时会发生什么事? least = MIN(*p++,b);
#define MIN(a,b) ((a)>(b)?(a):(b))
指针p会自增两次,这是宏定义的副作用

9.找出题中错误,并解释
void test1()
{
char string[10];
char* str1 = “0123456789”
strcpy(string, str1);
}

字符指针str1所指向的字符串一共有11个字符,包括字符串结束标志’\0’,而数组string只开辟了10个元素的空间(即10个字节),strcpy的赋值会造成数组的溢出

10.找出题中错误,并解释
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, “hello world” );
printf("%s", str);
}
要想修改指针的内容,需要定义二级指针,应把GetMemory函数的参数改为二级指针**p,同时调用函数的时候实参为&str

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值