歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 西郵linux小組面試題總結(2016-5-30)

西郵linux小組面試題總結(2016-5-30)

日期:2017/3/3 12:18:20   编辑:Linux技術

1.const和define的區別:

1->const在編譯階段用,define在預處理階段才替換

2->const檢查類型,const int i=3.5,這就是錯的;define不檢查類型,只完成普通的替換

3->const常量會在內存中分配,而define則不會。

2.指針變量在內存中的字節大小:

大小根本取決於cpu當下的尋址能力,在vc6.0下這個和你的cpu,操作系統和編譯器都有關占,領導如下:cpu>操作系統>編譯器,如果cpu是32位,那麼操作系統只能是32位,編譯器只能是16位或者32,如果編譯器32位,這時候尋址能力是4字節,如果編譯器16位,這時候尋址能力2字節,總之,一層一層是有限制關系的,你需要看具體情況。嘿嘿!希望我表達清楚了。

3.sizeof()和strlen()區別:

如果是sizeof(),他計算的是這段空間所用的內存字節,而strlen()算的是有效字節是多少。舉個栗子:

char a[20]="xiaoxiaoxuezha";

sizeof(a)是實際上開辟了20字節給它,因此sizeof(a)=20;

strlen(a)是有效字節,而且不算'\0',因此是strlen(a)=14;

4.看錯誤:

char *a[]={"I","am","xuezha"};

char *t[]=a+1;

分析以下數組a,數組a 中有三個元素,這三個元素存放的內容是指針,這三個指針分別指向以上三個字符串首地址,

a+0是a第一個元素的首地址,a+1是a第二個元素的首地址。因此第一種改的方案*t[]={a+1};當你定義一個數組時,t[]代表他的首地址是常量,常量不能被另一個常量賦值,因此也是錯。改的方法:char **t=a+1;

5.有沒有發現啥奇怪的地方,這個知識點我現在說的不全,不過我會進步滴!

int v0=3;

int v1[2]={1,2};

int v2;

void func(void )

{

int i,v3=3;

static int v4=7;

int sum=0;

v4=v4>>1;

sun=v0+v1[1]+v1[2]+v2+v3+v4;

for(i=0;i<sun;i++)

printf("啦啦啦");

}

解釋:全局變量靜態變量會放在內存的全局數據段,動態開辟內存的數據會在堆,而其他的(包括形參)放在堆棧,在全局數據段中,初始化的放一起,沒初始化的放一起,因此才有了v1[2]和v4共享一段內存!

6.實現一個函數,找出現字符最少的字符

char c[10]={'a','b','c','c','a','a','d','d','a','e','a'};

#include <stdio.h>

#include <string.h>

void suan(char c[],int a)

{

int t[26]={0};

int i,j,k;

int d;

for(i=0;i<a;i++)

t[(int)(c[i]-'a')]++;

d=t[0];

for(i=0;i<26;i++)

{

if((d>t[i])&&(t[i]!=0))

d=t[i];

}

for(i=0;i<26;i++)

if(d==t[i])

printf("%c\n",(char)(i+97));

}

7.小朋友傳糖,n個小孩子,每人手裡幾個氣球,現在要他們傳氣球,只能他傳給和他相鄰的人(兩個人之間不管傳了幾個,只算一次),而且,排頭只能傳給第二個,排尾只能傳給前一個,求傳球的次數和最小是多少?

#include <stdio.h>

#include <stdlib.h>

void main()

{

int i,j;

int n,*p;

int add=0,ci=0;

printf("輸入小朋友的人數:\n");

scanf("%d",&n);

p=(int*)malloc(sizeof(int)*n);

printf("你需要輸入%d個小朋友的糖果數目 : \n",n);

for(i=0;i<n;i++)

scanf("%d",p+i);

printf("counting!!!!!\n");

for(j=0;j<n;j++)

{

add=add+(*(p+i));

}

add=add/n;

for(j=0;j<n;j++)

{

int sub;

sub=add-p[j];

if(j==n-1)

break;

if((sub!=0)||(p[j]!=add))

{

ci++;

p[j+1] = p[j+1] - sub;

p[j] = p[j] + sub;

}

}

printf("需要%d次!!!\n",ci);

}

第一次寫博客,感覺怪怪的,希望各位親見諒。本學渣會加油的!!!

Copyright © Linux教程網 All Rights Reserved