SQ每日练习(三)

选择题

1.   B   静态链表用数组模拟链表,使用数组下标表示指针   

2.   D   线程是进程的组成部分,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

3.   B

 

选择题4:C   TCP协议将应用层的字节流分成多个字段

 

选择题5:D     不一一叙述

 

 

简答题1:简述数组与指针的区别?

       答:数组是一连续的记忆体区块,必须要先决定配置容量和存放的资料型态。

              当数组作为函数的参数进行传递时,数组就自动退化为通指针类型

              指针是指针变量的简称,这个变量存放的地址值,是可以改变的;

 

 

简答题:

2.const 含义:限定一个变量不允许被改变,产生静态作用

              作用:const作用:定义常量、修饰函数参数、修饰函数返回值三个作用。

                       被Const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

                       (1)修饰普通变量 const无论是放在数据类型的前面还是后面,都是将变量饰为常量

                       (2)和指针变量结合使用,从constk开始往右看,先遇到*p则*p不可以被改变,先遇到p,p不能被改变

3.const与#define相比,有何优点

              ①define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。

           ②const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了

             

 

4.

什么是预编译

预编译就是指程序执行前的一些预处理工作,主要指#表示的。

何时需要预编译

1.总是使用不经常改动的大型代码体。
2.
程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

两种格式区别

编辑

文件包含有两种格式,分别是:#include"file" #include

这两格式的区别在于:

1.使用双引号,系统首先到当前目录下查找被包含的文件,如果没找到,再到系统指定的"包含文件目录"(由用户在配置环境时设置)去找。

2.使用尖括号:直接到系统指定的"包含文件目录"去查找。

通常使用双引号比较保险

文件包含文件包含优点

编辑

一个大程序,通常分为多个模块,并由多个程序员分别编程。有了文件包含处理功能,就可以将多个模块共用的数据(如符号常量和数据结构)或函数,集中到一个单独的文件中。这样,凡是要使用其中数据或调用其中函数的程序员,只要使用文件包含处理功能,将所需文件包含进来即可,不必再重复定义它们,从而减少重复劳动和定义不一致造成的错误。

文件包含例子

编辑

文件F1.c

?

1

2

3

4

5

#define PI 3.1415926

 

#define R 3

 

#define S PI*R*R

文件F2.c

?

1

2

3

4

5

6

7

8

9

10

11

12

13

#include "F1.c"

 

#include "stdio.h"

 

main()

 

{

     

    float area=0;

  

    printf("area=%f\n",S);

 

}

VC++6.0的运行结果为:

?

1

area=28.274333

文件包含文件包含特点

编辑

文件包含的特点:

编译预处理时,预处理程序将查找指定的被包含文件,并将其复制插入到#include命令出现的位置上
常用在文件头部的被包含文件,称为标题文件头部文件,常以“h”(head)作为后缀,简称头文件。在头文件中,除可包含宏定义外,还可包含外部变量定义、结构类型定义等。

一条包含命令,只能指定一个被包含文件。如果要包含多个文件,则要用多条包含命令。例如,文件f1.h中要使用到文件f2.h和文件f3.h的内容,则可在文件f1.h中用两个文件包含命令分别包含文件f2.h和文件f3.h,即在文件f1.h中定义:
#include"f2.h"
#include"f3.h"
  在使用多个#include命令时,顺序是一个值得注意的问题。上例中,如果文件f1.h包含文件f2.h,而文件2要用到文件f3.h,则在f1.h#include定义的顺序应该是:
#include"f3.h"
#include"f2.h"
  这样文件f1.c和文件f2.h都可以使用文件f3.h的内容。

文件包含可以嵌套,即被包含文件中又包含另一个文件。例如,文件f2.h中要使用到文件f1.h的内容,文件f3.h要使用到文件f2.h的内容,则可在文件f2.h中用#include"f1.h"命令,在文件f3.h中用#include"f2.h"命令,即定义如下:
  文件f1.h
{
……
}
  文件f2.h
#include"f1.h"
intmax()
{
……
}
  文件f3.h
#include"f2.h"
main
{
……
}

#include命令一般用来把C语言提供的标准库头文件(如stdio.hmath.h)包含到程序中。程序员也可以自己定义一个头文件,写入一些常用的函数原型、宏定义、结构和联合类型定义等,然后将它包含到程序中。例如:#include"stdio.h" (标准输入/输出函数库)

#include"math.h" (数学函数库)

#include"stdlib.h" (常用函数库)

#include"string.h" (字符串处理函数库)

 

 

 

 

 

 

int a[5] : {1,2,3,4,5};
数组名a代表整个数组的地址,其值与数组中第一个元素的地址相同。
a+1相当于一个指向数组a的指针往后位移一个元素的距离。
*+(指针)== 指针指向地址中的内容。
printf( “%d”, *(a+1)) === 2;

&a为整个数组的地址+1后,相当于一个指向数组a的指针往后位移整个数组的距离。即int* ptr = (int*)(&a+1);

ptr-1是指针ptr往前移动一个单位(int型指针,移动单位为4字节)。
最后指向数组中的5。
printf(“%d”, *(ptr-1));===5

 

             

第二题:
主函数中调用了abc函数,将字符串str的地址传给了abc函数,
在abc函数中,利用a做字符数组str的下标,遍历字符串,将字符串中不是字符‘c’的其余字符,利用循环,重新赋值给字符数组str中下标为b的数组元素。

 

你可能感兴趣的:(C/C++)