linux兴趣小组2017面试题浅析
生活随笔
收集整理的這篇文章主要介紹了
linux兴趣小组2017面试题浅析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
linux興趣小組2017面試題
1. 分析下列程序的輸出.
int main(int argc, char *argv[]) {int t = 4;printf("%lu\n", sizeof(t--));printf("%lu\n", sizeof("ab c\nt\012\xa1*2"));return 0; }2. 下面代碼會輸出什么?
int main(int argc, char *argv[]) {int a = 10, b = 20, c = 30;printf("%d %d\n", b = b*c, c = c*2) ;printf("%d\n", printf("%d ", a+b+c));return 0; }3.下面代碼使用正確嗎?若正確,請說明代碼的作用;若不正確,請指出錯誤并修改。
void get_str(char *ptr) {ptr = (char*)malloc(17);strcpy(ptr, "Xiyou Linux Group"); } int main(int argc, char *argv[]) {char *str = NULL;get_str(str);printf("%s\n", str); }解決方法:
1) 使用二級指針
2) 使用函數返回值將新地址返回
char * get_str(char *ptr) {ptr = (char*)malloc(17);strcpy(ptr, "Xiyou Linux Group");return ptr; } int main(int argc, char *argv[]) {char *str = NULL;str = get_str(str);printf("%s\n", str); }4. 請解釋下面代碼的輸出結果。
size_t q(size_t b) {return b; } size_t (*p(char *str))(size_t a) {printf("%s\n", str);return q; } int main(int argc, char *argv[]) {char str[] = "XiyouLinuxGroup";printf("%lu\n", p(str)(strlen(str)));return 0; }9. 說明下面程序的運行結果。
int main(int argc, char *argv[]) {int a, b = 2, c = 5;for(a = 1; a < 4; a++){switch(a){b = 99;case 2:printf("c is %d\n", c);break;default:printf("a is %d\n", a);case 1:printf("b is %d\n", b);break;}}return 0; }輸出結果為:
b is 2 c is 5 a is 3 b is 2switch 中 case 之上的語句(賦值語句,輸出語句等)會被跳過, 在本題中表現為 b = 99; 被跳過, 因此b的值仍為2.
14. 請修改下面的 swap 函數,使得既可以交換 int 類型的參數,也可以交換 double 類型的參數。
void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp; }#define swap(a, b) ((x)=(x)+(y),(y)=(x)-(y),(x)=(x)-(y))
void swap(int *a, int *b, int size)
{
char buffer[8];
memcpy(buffer, a, size);
memcpy(a, b, size);
memcpy(b, buffer, size);
}
16. 請設計一個程序,通過命令行參數接收一個文件名 filename.txt( 純文本文件 ) 和一個整型數字 n,實現從 filename.txt 中刪除第 n 行數據。
詳細內容請看大佬的10種解法
17.解釋程序輸出結果
struct node {char a;short b;int c; }; int main(int argc, char *argv[]) {struct node s;memset(&s, 0, sizeof(s));s.a = 3;s.b = 5;s.c = 7;struct node *pt = &s;printf("%d\n", *(int*)pt);printf("%lld\n", *(long long *)pt);return 0; }大小端 : 一般電腦采用小端,即存儲時“低位在前,高位在后”,例如整型1在存儲時二進制碼為0000...0001(31個0, 1個1),而在內存中存儲時,實際存放順序為
00000001
00000000
00000000
00000000
為了提高計算機讀取內存內容的速度,采用的內存對齊的方法,各變量存儲的首地址必須為 自身所占內存大小 的整數倍。因為該結構體中a占1字節, b占2字節, c占4字節, 若a,b之間無空字節,則c首地址將會是3(設首地址為0), 且b首地址將是1, 不符合規則, 因此在a后添加一個空字節(內容全為0),以及技能性內存對齊;
總結
以上是生活随笔為你收集整理的linux兴趣小组2017面试题浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNF公会有多少级?
- 下一篇: 成都大熊猫繁育研究基地下午去好玩吗