合肥seo网站建设,广告创意设计方案,生意网官方网站,品质好的形容词第一题 1. 有下面的定义#xff0c;则 sizeof(s) 为多少#xff1f; char *s \ta\017bc; A#xff1a;9 B#xff1a;5 C#xff1a;6 D#xff1a;7 答案及解析 C 本题涉及到了转义字符 \t 是水平制表符#xff0c;算一个字节 \017 是表示八进制数#…第一题 1. 有下面的定义则 sizeof(s) 为多少 char *s \ta\017bc; A9 B5 C6 D7 答案及解析 C 本题涉及到了转义字符 \t 是水平制表符算一个字节 \017 是表示八进制数算一个字节 末尾有个隐藏的 \0 算一个字节 所以1 1 1 2 1 6字节 第二题 2. 下面是对s的初始化其中不正确的是 Achar s[5]{abc}; Bchar s[5]{a,b,c}; Cchar s[5] ; Dchar s[5]abcdef; 答案及解析 D ABC正确 A会被转换为 char s[5] {a, b, c, \0, \0} B同A转换的一样 C也是第一个是空格后面都是 \0 D错误明显的越界。 第三题 3. 对于下面代码段下面的语句中正确的是 const char * const name Chen ; Aname[3]a; Bnamelin; Cname(char*)malloc(sizeof(char)); Dprintf(%c\n, name[3]); 答案及解析 D 首先要明确const在* 的前后修饰的意义是不同的 const在*前修饰的是指针指向的对象不可被修改 而const在*后面则修饰的指本身不可以被修改 所以本题const都有表示指针不可以被修改的同时指针指向的内容也不可以被修改 ABC都是错误的A是修改内容BC都是修改指针的指向C是让指针指向新开辟的空间 D正确是输出没有对指针本身或者指向的内容做出改变 第四题好题 4. 运行下面程序的输出结果是 #include stdio.h
#include stdlib.h
#include string.h
void MallocMem(char* pc)
{pc (char*) malloc (100);return;
}int main()
{char *strNULL;MallocMem(str);strcpy(str,hello );strcat(str, world);printf(%s,str);return 0;
} Ahello world B程序编译错误 C程序运行时崩溃 D其他几项都不对 答案及解析 C 首先我们来分析一下这个程序先定义了一个字符指针str初始化为空指针然后作为一个参数传入了MallocMem这个函数进入这个函数之后开辟了一段空间 但是我们需要注意的是什么这里传入的实参是str本身然而形参是实参的一份临时拷贝对形参的改变不会影响我们的实参所以虽然开辟了空间让pc指针指向了这段空间但是对str没有任何改变而在MallocMem函数结束的时候形参pc就销毁了虽然空间还在因为是从堆上申请的空间不会因为函数的结束而销毁只会在整个程序结束自动销毁 这里插个题外话我们在使用malloc 的时候一定要主动去释放空间养成好习惯 所以我们重点要知道str依旧是个空指针对空指针进行strcpy的操作不会在编译这里报错因为编译只是检查语法的错误一定是在运行的时候出现错误对空指针的解引用会报错因为没有给str分配内存所以程序会崩溃所以如果我们要想让str指向新开辟的空间需要传str的地址C可以传引用来解决。 第五题 5. 下面的语句是否正确 char str[80];
strabcdefg A正确 B错误 答案及解析 B 首先数组名是一个指针常量类型是const 类型数组名不可以被修改 其次为什么可以char str[50] abcdefg因为这是开辟数组空间的同时给每个字符数组的元素都初始化了建立在栈区的 而题中的是我开辟了空间但是没有初始化而数组名是属于指针常量char * const类型的不可以被修改