前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【旧文重发 | 04】IC基础知识

【旧文重发 | 04】IC基础知识

作者头像
空白的贝塔
发布2022-05-24 09:23:29
8810
发布2022-05-24 09:23:29
举报
文章被收录于专栏:摸鱼范式摸鱼范式

[81] 以下两种初始化的方式有什么区别:“int a;” and “const int a;”?

const关键字告诉编译器,该变量或对象一旦进行初始化便不可更改。所以,int a 声明后,后续可以对变量a进行更改,而const int a,后续不可更改

[82] C语言中的关键词volatile是什么意思?

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。volatile关键字主要在与内存映射的输入输出(硬件)接口时使用。变量声明为volatile之后,编译器将无法执行任何优化,例如:删除内存分配,将变量缓存在寄存器中或更改分配的执行顺序。

[83] 解释指针的概念

指针是一个变量,其值是另一个变量的地址。星号*表示指针,int * p 告诉编译器变量“p”是一个指针,其值是存储整数变量的存储位置的地址。同样,float * f; 告诉编译器变量“ f”是一个指针,其值是存储浮点变量的存储位置的地址。以下列代码为例

代码语言:javascript
复制
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。

[84] 解释C语言中的“值传递”、“地址传递”和“引用传递”的区别
  • 值传递:在这种情况下,函数会用一块新的内存去存储变量,将参数的值复制进来,并且函数内部对参数的修改,不会影响到外部。下例中,在调用Exchg1(a,b)时最开始做的两个隐含动作是:int x=a;int y=b; 及 x=a;y=b; 原来函数在调用时是隐含地把参数a,b的值分别赋值给了x,y。之后在函数体内一直是对形参x,y进行操作。并没有对a,b进行任何操作。函数只是把a,b的值通过赋值传递将值传递给了x,y。函数里操作的只是x,y的值,并不是a,b的值。这就是所谓的值传递
代码语言:javascript
复制
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);
}
  • 地址传递:地址传递的参数为指针,函数内部实际上是通过指针实现的,通过指针的方式寻址,这种修改会对外部的值产生影响。下例中:在调用Exchg2(&a,&b)时最开始做的两个隐含动作是:int *px=&a;int *py=&b;.及 px=&a;py=&b; 原来函数在调用时是隐含地把参数a,b的地址分别传递给了指针px,py。之后在函数体内一直是对指针px,py进行操作。也就是对a,b的地址进行的操作。
代码语言:javascript
复制
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) Exchg3函数的定义处Exchg3(int&x, int &y)。调用时我们可以像值传递(如:Exchg1(a, b); )一样调用函数(如:Exchg3(a,b);)。但是x、y前都有一个取地址符号“&”。有了这个,调用Exchg3时函数会将a、b 分别代替了x、y了,我们称:x、y分别引用了a、b变量。这样函数里操作的其实就是实参a、b本身了,因此函数的值可在函数里被修改
代码语言:javascript
复制
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);
}
[85] NULL指针的值和大小是多少?

NULL指针可以定义为:int * a = NULL; NULL指针的值为0。指针是一个变量,其值是另一个变量的地址。由于指针的值是地址,所以指针的大小会因机器而异。如果是32=4*8位计算机,则指针大小为4个字节,如果计算机大小为64=8*8位,则指针大小为8个字节。

[86] 什么是链表?一共有几种类型的链表?

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

一共有三种不同类型的链表:

  1. 单向链表
  2. 双向链表
  3. 循环链表
[87] 以下算法的“最坏情况”时间复杂度是多少?
  1. 线性搜索
  2. 二进制搜索
  3. 插入排序
  4. 合并排序
  5. 桶排序

算法的时间复杂度代表了算法的运行时间,n代表输入算法的参数数量。通常使用big O算法进行评估,例如某算法隐形时间为5n^4 + 6n^2 + 1,取最高阶为n^4,那么其算法复杂度为O(n^4)。所以以上算法的算法复杂度为:

  1. O(N)
  2. O(log(N))
  3. O(N2)
  4. O(N*log(N))
  5. O(N)
[88] 以下算法的空间复杂度是多少?
  1. 线性搜索
  2. 二进制搜索
  3. 插入排序
  4. 合并排序
  5. 桶排序

空间复杂度的概念类似于时间复杂度,但是衡量的值是算法运行时所需要的内存空间。以上算法的空间复杂度为:

  1. O(1)
  2. O(1)
  3. O(N)
  4. O(N)
  5. O(N)
[89] C/C++中,"&"和"&&"有什么区别?

&是按位与运算符,而&&是逻辑与运算符。逻辑运算符使用布尔值-真(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);

[90] “Struct” 和 “Union” 在 C/C++ 中,内存分配上有什么不同?

Struct分配足够的空间来存储结构中的所有字段/成员。第一个存储在Struct的开头,第二个存储在Struct的开头,依此类推。

Union仅分配足够的空间来存储列出的最大字段,并且所有字段都存储在同一空间中。这是因为在Union中,一次只能使用一种类型的封闭变量,而不是可以引用所有封闭变量的struct。

[91] 下面这个结构体需要多大的内存进行存储?
代码语言:javascript
复制
struct ID {
int IntID;
char CharID[8];
};

需要12个字节,int需要4个字节,char数组需要8个字节。

[92] 下面这个联合体需要多大的内存进行存储?
代码语言:javascript
复制
union ID {
int IntID;
char CharID[8];
};

需要8个字节,数组CharID需要8个字节。

[93] 什么是内核(kernel)?

内核是一种计算机程序,它用于管理来自软件的输入/输出请求,并将这些请求转换为CPU指令或其他指令。

[94] perl代表什么意思?

Practical Extraction and Reporting Language。

[95] perl中有多少种不同类型的变量?
  • 标量(scalars):标量用$定义,标量是perl中最简单的变量。标量可以是数字,也可以是字符串或引用。
  • 数组(arrays):数组用@定义,数组是标量的有序列表,数组的索引是从0开始的。
  • 哈希(hashes):哈希用%定义,哈希是键/值对的无序集合,可以将键用作下标来访问。
[96] 什么是Cron Job?如何使用Cron Job?

Cron Job是操作系统中基于时间的作业调度程序。它允许在指定的时间,日期,间隔等自动定期运行作业。例如:假设用户具有Shell或Perl脚本,该脚本计算UNIX / Linux中磁盘的人均磁盘空间使用情况。在UNIX / Linux中为此脚本以指定的频率(或时间)设置Cron Job将确保该脚本在计划的时间(或频率)下自动运行,而用户无需每次都手动运行它。

[97] 在UNIX / Linux中,“ rsync”命令的用途是什么?

“ rsync”代表“Remote Sync(远程同步)”,它是在磁盘,网络,服务器和机器之间复制或同步文件/目录的常用命令。rsync仅移动文件中已更改的那些部分,因此可以将需要复制的数据量减至最少。 “ rsync”在发送和接收数据时使用某些压缩和解压缩方法,进步减小带宽消耗。“ rsync”命令最常见的用途之一是在两台计算机之间执行数据备份和镜像磁盘等操作。

[98] C/C++中"\0"字符的用途是什么?

字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。

[99] 什么是二叉树?

二叉树是链表概念的扩展。一个二叉树的节点有两个指针:“一个左指针”和“一个右指针”。每一个节点可以进一步分支以形成另外的节点,每个节点也具有两个指针。

[100] 什么是正则表达式中的特殊字符、量词和锚点?
  • 特殊字符是为正则表达式用于搜索的,具备特殊含义的元字符。示例:,^,$,(),[],|,&
  • 量词用于指定匹配前面的正则表达式的“频率”。示例:*, +, ?, {}
  • 锚点指正则匹配时的匹配的位置。锚点允许用户指定文本搜索的位置。示例:^, $, <, >
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [82] C语言中的关键词volatile是什么意思?
  • [83] 解释指针的概念
  • [84] 解释C语言中的“值传递”、“地址传递”和“引用传递”的区别
  • [85] NULL指针的值和大小是多少?
  • [86] 什么是链表?一共有几种类型的链表?
  • [87] 以下算法的“最坏情况”时间复杂度是多少?
  • [88] 以下算法的空间复杂度是多少?
  • [89] C/C++中,"&"和"&&"有什么区别?
  • [90] “Struct” 和 “Union” 在 C/C++ 中,内存分配上有什么不同?
  • [91] 下面这个结构体需要多大的内存进行存储?
  • [92] 下面这个联合体需要多大的内存进行存储?
  • [93] 什么是内核(kernel)?
  • [94] perl代表什么意思?
  • [95] perl中有多少种不同类型的变量?
  • [96] 什么是Cron Job?如何使用Cron Job?
  • [97] 在UNIX / Linux中,“ rsync”命令的用途是什么?
  • [98] C/C++中"\0"字符的用途是什么?
  • [99] 什么是二叉树?
  • [100] 什么是正则表达式中的特殊字符、量词和锚点?
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档