加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

嵌入式C語言面試題1

12/02 12:00
623
閱讀需 13 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1.已知字符‘A‘的ASCⅡ碼值是是65,且char c1=‘A’,c2=‘D’;則執(zhí)行語句printf(“%d, %dn”, c1, c2-2); 后的輸出結果是(?)

A?A,DB?A,BC?65,68D?65,66

解析:

在C語言中,字符常量在內存中是以其ASCⅡ碼值存儲的,可以通過字符變量直接獲取其ASCⅡ碼值。

首先,我們已知:

字符‘A’的ASCⅡ碼值是65。

字符‘D’的ASCⅡ碼值是68(因為‘D’在‘A’之后3個位置,所以65+3=68)。

接下來,分析題目中的代碼:

char c1 = 'A';?這行代碼定義了字符變量c1,并將其初始化為字符‘A’,所以c1的ASCⅡ碼值是65。

char c2 = 'D';?這行代碼定義了字符變量c2,并將其初始化為字符‘D’,所以c2的ASCⅡ碼值是68。

然后,執(zhí)行printf("%d, %dn", c1, c2-2);這條語句:

%d是整數格式說明符,用于輸出整數。

c1直接輸出,其值為字符‘A’的ASCⅡ碼值,即65。

c2-2計算的是字符‘D’的ASCⅡ碼值減去2,即68-2=66。66正好是字符‘B’的ASCⅡ碼值,但這里以整數形式輸出。

因此,輸出結果是65, 66

所以,正確答案是D)65,66。

2.char *p="girl"?;的含義是定義字符型指針變量p,p的值是字符串"girl"。()

A?正確

B?錯誤

解析:

這是一道關于C語言中指針和字符串的題目。我們需要判斷給定的語句char *p="girl";是否正確地描述了指針變量p的定義和它的值。

首先,分析語句char *p="girl";

char *p定義了一個字符型指針變量p。

"girl"是一個字符串常量,它在內存中的某個位置有一個首地址。

p被初始化為指向字符串常量"girl"的首地址。

接下來,判斷題目的描述:

“定義字符型指針變量p”是正確的,因為char *p確實定義了一個字符型指針。

“p的值是字符串"girl"”這一描述需要澄清。實際上,p的值不是字符串"girl"本身,而是該字符串在內存中的首地址。字符串本身是由多個字符組成的字符數組,并以空字符結尾。指針p指向這個數組的首元素(即字符'g'的地址)。

因此,題目的描述是不準確的。指針p存儲的是字符串"girl"的首地址,而不是字符串本身。

所以,正確答案是B)錯誤。

3.在x86系統(tǒng)下,sizeof如下結構體的值是多少?

struct{    char a[10];    int b;    short c[3];}

解析:

在x86系統(tǒng)下(即32位系統(tǒng)),sizeof運算符用于計算結構體所占的內存大小。計算時需要考慮結構體的成員類型、數量以及內存對齊(alignment)的要求。

給定的結構體如下:

復制代碼

struct {
char a[10];
int b;
short c[3];
};

我們逐一分析每個成員的大小和對齊要求:

char a[10];:這是一個字符數組,包含10個字符。每個字符的大小是1字節(jié),所以整個數組的大小是10字節(jié)。

int b;:在x86系統(tǒng)下,int類型通常占用4字節(jié),并且它通常要求按4字節(jié)對齊。

short c[3];:這是一個短整型數組,包含3個short類型的元素。在x86系統(tǒng)下,short類型通常占用2字節(jié)。數組的總大小是6字節(jié),但每個short可能也要求按2字節(jié)或4字節(jié)對齊(具體取決于編譯器的對齊策略)。

現在,我們根據這些信息進行計算,同時考慮內存對齊:

char a[10];占用10字節(jié),不需要對齊調整。

接下來是int b;,它要求4字節(jié)對齊。由于char a[10];已經占用了10字節(jié),而下一個4字節(jié)對齊的位置是12字節(jié)(因為10不是4的倍數),所以在這里會有2字節(jié)的填充(padding)。

int b;占用4字節(jié)。

最后是short c[3];,每個short占用2字節(jié),總共6字節(jié)。但是,由于int b;之后的位置已經是4字節(jié)對齊的,并且short數組通常要求按2字節(jié)或4字節(jié)對齊(具體取決于編譯器),所以在這里可能不需要額外的填充。然而,為了簡化計算,我們假設編譯器選擇4字節(jié)對齊,并且short c[3];之后也需要4字節(jié)對齊(這是最常見的情況)。那么,在int b;(4字節(jié))和short c[3];(6字節(jié))之間會有2字節(jié)的填充,使得short c[3];從4字節(jié)對齊的位置開始。

short c[3];本身占用6字節(jié),不需要額外的填充來達到4字節(jié)對齊,因為它之后沒有其他成員了。

綜上所述,結構體的內存布局可能如下(考慮4字節(jié)對齊):復制代碼

| char a[10] | padding (2 bytes) | int b (4 bytes) | padding (2 bytes) | short c[3] (6 bytes) |
|-------------|-------------------|-----------------|-------------------|--------------------|
| 10 bytes | 2 bytes | 4 bytes | 2 bytes | 6 bytes |

 

因此,結構體的總大小是:10 + 2 + 4 + 2 + 6 = 24字節(jié)。

所以,在x86系統(tǒng)下,sizeof這個結構體的值是24字節(jié)。

4.運行以下C語言代碼,輸出的結果是()

#include <stdio.h>
int main(){    char *str[3] ={"stra", "strb", "strc"};    char *p =str[0];    int i = 0;????while(i?<?3) {        printf("%s ",p++);????????i++;????}    return 0;}

A?stra strb strc

B?s t r

C?stra tra ra

D?s s s

解析:

char *str[3] = {"stra", "strb", "strc"};?定義了一個包含三個字符指針的數組,每個指針分別指向字符串 "stra"、"strb" 和 "strc" 的首字符。

char *p = str[0];?初始化指針?p,使其指向?str?數組的第一個元素,即字符串 "stra" 的首字符。

進入?while?循環(huán),循環(huán)條件是?i < 3,意味著循環(huán)體會執(zhí)行三次。

在循環(huán)體內:

printf("%s ", p++);?打印?p?當前指向的字符串,并將?p?遞增,使其指向下一個字符。

i++;?遞增循環(huán)計數器?i。

現在,我們逐步跟蹤循環(huán)的執(zhí)行:

第一次循環(huán):

p?指向 "stra" 的 's'。

打印 "stra "。

p++?使?p?指向 "stra" 的 't'。

i?變?yōu)?1。

第二次循環(huán):

p?現在指向 "stra" 的 't'。

打印 "tra "(注意,p?已經跳過了 's')。

p++?使?p?指向 "stra" 的 'r'。

i?變?yōu)?2。

第三次循環(huán):

p?現在指向 "stra" 的 'r'。

打印 "ra "(注意,p?已經跳過了 's' 和 't')。

p++?會使?p?指向 "stra" 的 'a',但此時循環(huán)已經結束。

i?變?yōu)?3,循環(huán)條件不再滿足。

因此,程序的輸出是:復制代碼

stra tra ra

所以,運行這段代碼的結果是輸出字符串 "stra tra ra "。

5.有以下語句:printf("%sn", strp[0]);輸出值是多少?

char str[4][12] = {"aaa", "bbbb", "ccccc", "dddddd"}, *strp[4];for (int i = 0; i < 4; i++)    strp[i] = str[i];

解析:

在這段C語言代碼中,我們定義了一個二維字符數組str和一個字符指針數組strp,并通過循環(huán)將str中每一行的首地址賦值給strp中對應的元素。接下來,我們詳細解讀這段代碼。

首先,看定義部分:

復制代碼

char str[4][12] = {"aaa", "bbbb", "ccccc", "dddddd"};
char *strp[4];

char str[4][12]定義了一個包含4行、每行12列的二維字符數組,并初始化了前四行。需要注意的是,雖然為每行分配了12個字符的空間,但實際存儲的字符串長度并未達到12,剩余空間將自動填充為空字符。

char *strp[4]則定義了一個包含4個字符指針的數組,這些指針將用于指向字符串。

接下來,通過循環(huán)為strp數組賦值:

復制代碼

for (int i = 0; i < 4; i++)
strp[i] = str[i];

在這個循環(huán)中,i從0遍歷到3。

對于每個i,str[i]表示str數組中的第i行,也就是一個指向該行首字符的指針。

我們將這個指針賦值給strp[i],因此strp[i]現在指向了str數組中的第i行字符串。

循環(huán)結束后,strp數組中的每個元素都指向了str數組中的一行字符串。具體來說:

strp[0]指向"aaa"

strp[1]指向"bbbb"

strp[2]指向"ccccc"

strp[3]指向"dddddd"

此時,我們可以利用strp數組中的指針來訪問或操作str數組中的字符串。例如,printf("%sn", strp[0]);將會輸出"aaa"。

未完待續(xù),持續(xù)更新!以防后邊找不到可以點贊收藏下!

相關推薦

電子產業(yè)圖譜