[81] 以下两种初始化的方式有什么区别:“int a;” and “const int a;”?
const关键字告诉编译器,该变量或对象一旦进行初始化便不可更改。所以,int a 声明后,后续可以对变量a进行更改,而const int a,后续不可更改
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。volatile关键字主要在与内存映射的输入输出(硬件)接口时使用。变量声明为volatile之后,编译器将无法执行任何优化,例如:删除内存分配,将变量缓存在寄存器中或更改分配的执行顺序。
指针是一个变量,其值是另一个变量的地址。星号*表示指针,int * p 告诉编译器变量“p”是一个指针,其值是存储整数变量的存储位置的地址。同样,float * f; 告诉编译器变量“ f”是一个指针,其值是存储浮点变量的存储位置的地址。以下列代码为例
int a = 10;
int *b;
int c;
b = &a;
c = *b;
printf(“b=%d and c=%d\n”,b,c);
其中a是一个变量,他的值是10,b是一个指针,通过语句 b = &a 将a的地址传给了指针b。而通过c = *b 将指针b内地址所指向的值,即a的值赋予c。
void Exchg1(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("x = %d, y = %d\n", x, y);
}
main()
{
int a = 4,b = 6;
Exchg1(a, b);
printf("a = %d, b = %d\n", a, b);
return(0);
}
void Exchg2(int *px, int *py)
{
int tmp = *px;
*px = *py;
*py = tmp;
printf("*px = %d, *py = %d.\n",*px, *py);
}
main()
{
int a = 4,b = 6;
Exchg2(&a, &b);
printf("a = %d, b = %d.\n", a,b);
return(0);
}
void Exchg3(int &x, int &y)
{
int tmp = x;
x = y;
y = tmp;
printf("x= %d,y = %d\n", x, y);
}
main()
{
int a = 4,b =6;
Exchg3(a, b);
printf("a= %d, b = %d\n", a, b);
return(0);
}
NULL指针可以定义为:int * a = NULL; NULL指针的值为0。指针是一个变量,其值是另一个变量的地址。由于指针的值是地址,所以指针的大小会因机器而异。如果是32=4*8位计算机,则指针大小为4个字节,如果计算机大小为64=8*8位,则指针大小为8个字节。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
一共有三种不同类型的链表:
算法的时间复杂度代表了算法的运行时间,n代表输入算法的参数数量。通常使用big O算法进行评估,例如某算法隐形时间为5n^4 + 6n^2 + 1,取最高阶为n^4,那么其算法复杂度为O(n^4)。所以以上算法的算法复杂度为:
空间复杂度的概念类似于时间复杂度,但是衡量的值是算法运行时所需要的内存空间。以上算法的空间复杂度为:
&是按位与运算符,而&&是逻辑与运算符。逻辑运算符使用布尔值-真(1)和假(0),并返回布尔值。按位运算符对每个位执行位操作并返回位值。
按位运算符:如果a = 10而b = 6,则a&b将返回2(4'b1010&4'b0110 = 4'b0010)
逻辑运算符:如果a = 10而b = 6,则以下表达式将返回true,因为对两个布尔值进行操作,则为true c =(a == 10)&&(b == 6);
Struct分配足够的空间来存储结构中的所有字段/成员。第一个存储在Struct的开头,第二个存储在Struct的开头,依此类推。
Union仅分配足够的空间来存储列出的最大字段,并且所有字段都存储在同一空间中。这是因为在Union中,一次只能使用一种类型的封闭变量,而不是可以引用所有封闭变量的struct。
struct ID {
int IntID;
char CharID[8];
};
需要12个字节,int需要4个字节,char数组需要8个字节。
union ID {
int IntID;
char CharID[8];
};
需要8个字节,数组CharID需要8个字节。
内核是一种计算机程序,它用于管理来自软件的输入/输出请求,并将这些请求转换为CPU指令或其他指令。
Practical Extraction and Reporting Language。
Cron Job是操作系统中基于时间的作业调度程序。它允许在指定的时间,日期,间隔等自动定期运行作业。例如:假设用户具有Shell或Perl脚本,该脚本计算UNIX / Linux中磁盘的人均磁盘空间使用情况。在UNIX / Linux中为此脚本以指定的频率(或时间)设置Cron Job将确保该脚本在计划的时间(或频率)下自动运行,而用户无需每次都手动运行它。
“ rsync”代表“Remote Sync(远程同步)”,它是在磁盘,网络,服务器和机器之间复制或同步文件/目录的常用命令。rsync仅移动文件中已更改的那些部分,因此可以将需要复制的数据量减至最少。 “ rsync”在发送和接收数据时使用某些压缩和解压缩方法,进步减小带宽消耗。“ rsync”命令最常见的用途之一是在两台计算机之间执行数据备份和镜像磁盘等操作。
字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。
二叉树是链表概念的扩展。一个二叉树的节点有两个指针:“一个左指针”和“一个右指针”。每一个节点可以进一步分支以形成另外的节点,每个节点也具有两个指针。