1.是不是一個(gè)父類(lèi)寫(xiě)了一個(gè)virtual 函數(shù),如果子類(lèi)覆蓋它的函數(shù)不加virtual ,也能實(shí)現(xiàn)多態(tài)?
virtual修飾符會(huì)被隱形繼承的。private 也被集成,只事派生類(lèi)沒(méi)有訪問(wèn)權(quán)限而已。virtual可加可不加。子類(lèi)的空間里有父類(lèi)的所有變量(static除外)。同一個(gè)函數(shù)只存在一個(gè)實(shí)體(inline除外)。子類(lèi)覆蓋它的函數(shù)不加virtual ,也能實(shí)現(xiàn)多態(tài)。在子類(lèi)的空間里,有父類(lèi)的私有變量。私有變量不能直接訪問(wèn)。
--------------------------------------------------------------------------
2.輸入一個(gè)字符串,將其逆序后輸出。(使用C++,不建議用偽碼)
#include <iostream>
using namespace std;
void main()
{
char a[50];memset(a,0,sizeof(a));
int i=0,j;
char t;
cin.getline(a,50,'\n');
for(i=0,j=strlen(a)-1;i<strlen(a)/2;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
cout<<a<<endl;
}
方法還有很多。
--------------------------------------------------------------------------
3.請(qǐng)簡(jiǎn)單描述Windows內(nèi)存管理的方法。
內(nèi)存管理是操作系統(tǒng)中的重要部分,兩三句話恐怕誰(shuí)也說(shuō)不清楚吧~~
我先說(shuō)個(gè)大概,希望能夠拋磚引玉吧
當(dāng)程序運(yùn)行時(shí)需要從內(nèi)存中讀出這段程序的代碼。代碼的位置必須在物理內(nèi)存中才能被運(yùn)行,由于現(xiàn)在的操作系統(tǒng)中有非常多的程序運(yùn)行著,內(nèi)存中不能夠完全放下,所以引出了虛擬內(nèi)存的概念。把哪些不常用的程序片斷就放入虛擬內(nèi)存,當(dāng)需要用到它的時(shí)候在load入主存(物理內(nèi)存)中。這個(gè)就是內(nèi)存管理所要做的事。內(nèi)存管理還有另外一件事需要做:計(jì)算程序片段在主存中的物理位置,以便CPU調(diào)度。
內(nèi)存管理有塊式管理,頁(yè)式管理,段式和段頁(yè)式管理?,F(xiàn)在常用段頁(yè)式管理
塊式管理:把主存分為一大塊、一大塊的,當(dāng)所需的程序片斷不在主存時(shí)就分配一塊主存空間,把程 序片斷l(xiāng)oad入主存,就算所需的程序片度只有幾個(gè)字節(jié)也只能把這一塊分配給它。這樣會(huì)造成很大的浪費(fèi),平均浪費(fèi)了50%的內(nèi)存空間,但時(shí)易于管理。
頁(yè)式管理:把主存分為一頁(yè)一頁(yè)的,每一頁(yè)的空間要比一塊一塊的空間小很多,顯然這種方法的空間利用率要比塊式管理高很多。
段式管理:把主存分為一段一段的,每一段的空間又要比一頁(yè)一頁(yè)的空間小很多,這種方法在空間利用率上又比頁(yè)式管理高很多,但是也有另外一個(gè)缺點(diǎn)。一個(gè)程序片斷可能會(huì)被分為幾十段,這樣很多時(shí)間就會(huì)被浪費(fèi)在計(jì)算每一段的物理地址上(計(jì)算機(jī)最耗時(shí)間的大家都知道是I/O吧)。
段頁(yè)式管理:結(jié)合了段式管理和頁(yè)式管理的優(yōu)點(diǎn)。把主存分為若干頁(yè),每一頁(yè)又分為若干段。好處就很明顯,不用我多說(shuō)了吧。
各種內(nèi)存管理都有它自己的方法來(lái)計(jì)算出程序片斷在主存中的物理地址,其實(shí)都很相似。
這只是一個(gè)大概而已,不足以說(shuō)明內(nèi)存管理的皮毛。無(wú)論哪一本操作系統(tǒng)書(shū)上都有詳細(xì)的講解
--------------------------------------------------------------------------
4.
#include "stdafx.h"
#define SQR(X) X*X
int main(int argc, char* argv[])
{
int a = 10;
int k = 2;
int m = 1;
a /= SQR(k+m)/SQR(k+m);
printf("%d\n",a);
return 0;
}
這道題目的結(jié)果是什么啊?
define 只是定義而已,在編擇時(shí)只是簡(jiǎn)單代換X*X而已,并不經(jīng)過(guò)算術(shù)法則的
a /= (k+m)*(k+m)/(k+m)*(k+m);
=>a /= (k+m)*1*(k+m);
=>a = a/9;
=>a = 1;
--------------------------------------------------------------------------
5.
const 符號(hào)常量;
(1)const char *p
(2)char const *p
(3)char * const p
說(shuō)明上面三種描述的區(qū)別;
如果const位于星號(hào)的左側(cè),則const就是用來(lái)修飾指針?biāo)赶虻淖兞?,即指針指向?yàn)槌A浚?br>如果const位于星號(hào)的右側(cè),const就是修飾指針本身,即指針本身是常量。
(1)const char *p
一個(gè)指向char類(lèi)型的const對(duì)象指針,p不是常量,我們可以修改p的值,使其指向不同的char,但是不能改變它指向非char對(duì)象,如:
const char *p;
char c1='a';
char c2='b';
p=&c1;//ok
p=&c2;//ok
*p=c1;//error
(2)char const *p
1)2)是一樣的,此時(shí)*p可以修改,而p不能修改。p為const pointer.即指向const 對(duì)象的指針,對(duì)象只讀。
(3)char * const p
常量指針,指針本身所指向的地址不可改變。
(4)const char * const p
這種是地址及指向?qū)ο蠖疾荒苄薷摹?/font>
--------------------------------------------------------------------------
6.下面是C語(yǔ)言中兩種if語(yǔ)句判斷方式。請(qǐng)問(wèn)哪種寫(xiě)法更好?為什么?
int n;
if (n == 10) // 第一種判斷方式
if (10 == n) // 第二種判斷方式
如果少了個(gè)=號(hào),編譯時(shí)就會(huì)報(bào)錯(cuò),減少了出錯(cuò)的可能行,可以檢測(cè)出是否少了=
--------------------------------------------------------------------------
7.下面的代碼有什么問(wèn)題?
void DoSomeThing(...)
{
char* p;
...
p = malloc(1024); // 分配1K的空間
if (NULL == p)
return;
...
p = realloc(p, 2048); // 空間不夠,重新分配到2K
if (NULL == p)
return;
...
}
A:
p = malloc(1024); 應(yīng)該寫(xiě)成: p = (char *) malloc(1024);
沒(méi)有釋放p的空間,造成內(nèi)存泄漏。
--------------------------------------------------------------------------
8.下面的代碼有什么問(wèn)題?并請(qǐng)給出正確的寫(xiě)法。
void DoSomeThing(char* p)
{
char str[16];
int n;
assert(NULL != p);
sscanf(p, "%s%d", str, n);
if (0 == strcmp(str, "something"))
{
...
}
}
A:
sscanf(p, "%s%d", str, n); 這句該寫(xiě)成: sscanf(p, "%s%d", str, &n);
--------------------------------------------------------------------------
9.下面代碼有什么錯(cuò)誤?
Void test1()
{
char string[10];
char *str1="0123456789";
strcpy(string, str1);
}
數(shù)組越界
--------------------------------------------------------------------------
10.下面代碼有什么問(wèn)題?
Void test2()
{
char string[10], str1[10];
for(i=0; i<10;i++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
數(shù)組越界
--------------------------------------------------------------------------
11.下面代碼有什么問(wèn)題?
Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
==數(shù)組越界
==strcpy拷貝的結(jié)束標(biāo)志是查找字符串中的\0 因此如果字符串中沒(méi)有遇到\0的話 會(huì)一直復(fù)制,直到遇到\0,上面的123都因此產(chǎn)生越界的情況
建議使用 strncpy 和 memcpy
--------------------------------------------------------------------------
12.下面代碼有什么問(wèn)題?
#define MAX_SRM 256
DSN get_SRM_no()
{
static int SRM_no; //是不是這里沒(méi)賦初值?
int I;
for(I=0;I<MAX_SRM;I++,SRM_no++)
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
系統(tǒng)會(huì)初始化static int變量為0,但該值會(huì)一直保存,所謂的不可重入...
--------------------------------------------------------------------------
13.寫(xiě)出運(yùn)行結(jié)果:
{// test1
char str[] = "world"; cout << sizeof(str) << ": ";
char *p = str; cout << sizeof(p) << ": ";
char i = 10; cout << sizeof(i) << ": ";
void *pp = malloc(10); cout << sizeof(p) << endl;
}
6:4:1:4
--------------------------------------------------------------------------
14.寫(xiě)出運(yùn)行結(jié)果:
{// test2
union V {
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;
unsigned char c;
} v;
v.c = 100;
printf("%d", v.x.s3);
}
3
--------------------------------------------------------------------------
15.用C++寫(xiě)個(gè)程序,如何判斷一個(gè)操作系統(tǒng)是16位還是32位的?不能用sizeof()函數(shù)
A1:
16位的系統(tǒng)下,
int i = 65536;
cout << i; // 輸出0;
int i = 65535;
cout << i; // 輸出-1;
32位的系統(tǒng)下,
int i = 65536;
cout << i; // 輸出65536;
int i = 65535;
cout << i; // 輸出65535;
A2:
int a = ~0;
if( a>65536 )
{
cout<<"32 bit"<<endl;
}
else
{
cout<<"16 bit"<<endl;
}
--------------------------------------------------------------------------
16.C和C++有什么不同?
從機(jī)制上:c是面向過(guò)程的(但c也可以編寫(xiě)面向?qū)ο蟮某绦颍?;c++是面向?qū)ο蟮?,提供了?lèi)。但是,
c++編寫(xiě)面向?qū)ο蟮某绦虮萩容易
從適用的方向:c適合要求代碼體積小的,效率高的場(chǎng)合,如嵌入式;c++適合更上層的,復(fù)雜的; llinux核心大部分是c寫(xiě)的,因?yàn)樗窍到y(tǒng)軟件,效率要求極高。
從名稱(chēng)上也可以看出,c++比c多了+,說(shuō)明c++是c的超集;那為什么不叫c+而叫c++呢,是因?yàn)閏++比
c來(lái)說(shuō)擴(kuò)充的東西太多了,所以就在c后面放上兩個(gè)+;于是就成了c++
C語(yǔ)言是結(jié)構(gòu)化編程語(yǔ)言,C++是面向?qū)ο缶幊陶Z(yǔ)言。
C++側(cè)重于對(duì)象而不是過(guò)程,側(cè)重于類(lèi)的設(shè)計(jì)而不是邏輯的設(shè)計(jì)。
--------------------------------------------------------------------------
17.在不用第三方參數(shù)的情況下,交換兩個(gè)參數(shù)的值
#include <stdio.h>
void main()
{
int i=60;
int j=50;
i=i+j;
j=i-j;
i=i-j;
printf("i=%d\n",i);
printf("j=%d\n",j);
}
方法二:
i^=j;
j^=i;
i^=j;
方法三:
// 用加減實(shí)現(xiàn),而且不會(huì)溢出
a = a+b-(b=a)
--------------------------------------------------------------------------
18.有關(guān)位域的面試題(為什么輸出的是一個(gè)奇怪的字符)
a.t = 'b';效果相當(dāng)于 a.t= 'b' & 0xf;
'b' --> 01100010
'b' & 0xf -->>00000010
所以輸出Ascii碼為2的特殊字符
char t:4;就是4bit的字符變量,同樣
unsigned short i:8;就是8bit的無(wú)符號(hào)短整形變量
--------------------------------------------------------------------------
19.int i=10, j=10, k=3; k*=i+j; k最后的值是?
60
--------------------------------------------------------------------------
20.進(jìn)程間通信的方式有?
進(jìn)程間通信的方式有 共享內(nèi)存, 管道 ,Socket ,消息隊(duì)列 , DDE等
--------------------------------------------------------------------------
21.
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
}
sizeof(A)=?(不考慮邊界對(duì)齊)
7
struct CELL // Declare CELL bit field
{
unsigned character : 8; // 00000000 ????????
unsigned foreground : 3; // 00000??? 00000000
unsigned intensity : 1; // 0000?000 00000000
unsigned background : 3; // 0???0000 00000000
unsigned blink : 1; // ?0000000 00000000
} screen[25][80]; // Array of bit fields
二、位結(jié)構(gòu)
位結(jié)構(gòu)是一種特殊的結(jié)構(gòu), 在需按位訪問(wèn)一個(gè)字節(jié)或字的多個(gè)位時(shí), 位結(jié)構(gòu)
比按位運(yùn)算符更加方便。
位結(jié)構(gòu)定義的一般形式為:
struct位結(jié)構(gòu)名{
數(shù)據(jù)類(lèi)型 變量名: 整型常數(shù);
數(shù)據(jù)類(lèi)型 變量名: 整型常數(shù);
} 位結(jié)構(gòu)變量;
其中: 數(shù)據(jù)類(lèi)型必須是int(unsigned或signed)。 整型常數(shù)必須是非負(fù)的整
數(shù), 范圍是0~15, 表示二進(jìn)制位的個(gè)數(shù), 即表示有多少位。
變量名是選擇項(xiàng), 可以不命名, 這樣規(guī)定是為了排列需要。
例如: 下面定義了一個(gè)位結(jié)構(gòu)。
struct{
unsigned incon: 8; /*incon占用低字節(jié)的0~7共8位*/
unsigned txcolor: 4;/*txcolor占用高字節(jié)的0~3位共4位*/
unsigned bgcolor: 3;/*bgcolor占用高字節(jié)的4~6位共3位*/
unsigned blink: 1; /*blink占用高字節(jié)的第7位*/
}ch;
位結(jié)構(gòu)成員的訪問(wèn)與結(jié)構(gòu)成員的訪問(wèn)相同。
例如: 訪問(wèn)上例位結(jié)構(gòu)中的bgcolor成員可寫(xiě)成:
ch.bgcolor
注意:
1. 位結(jié)構(gòu)中的成員可以定義為unsigned, 也可定義為signed, 但當(dāng)成員長(zhǎng)
度為1時(shí), 會(huì)被認(rèn)為是unsigned類(lèi)型。因?yàn)閱蝹€(gè)位不可能具有符號(hào)。
2. 位結(jié)構(gòu)中的成員不能使用數(shù)組和指針, 但位結(jié)構(gòu)變量可以是數(shù)組和指針,
如果是指針, 其成員訪問(wèn)方式同結(jié)構(gòu)指針。
3. 位結(jié)構(gòu)總長(zhǎng)度(位數(shù)), 是各個(gè)位成員定義的位數(shù)之和, 可以超過(guò)兩個(gè)字
節(jié)。
4. 位結(jié)構(gòu)成員可以與其它結(jié)構(gòu)成員一起使用。
例如:
struct info{
char name[8];
int age;
struct addr address;
float pay;
unsigned state: 1;
unsigned pay: 1;
}workers;
上例的結(jié)構(gòu)定義了關(guān)于一個(gè)工人的信息。其中有兩個(gè)位結(jié)構(gòu)成員, 每個(gè)位結(jié)
構(gòu)成員只有一位, 因此只占一個(gè)字節(jié)但保存了兩個(gè)信息, 該字節(jié)中第一位表示工
人的狀態(tài), 第二位表示工資是否已發(fā)放。由此可見(jiàn)使用位結(jié)構(gòu)可以節(jié)省存貯空間。
--------------------------------------------------------------------------
22.下面的函數(shù)實(shí)現(xiàn)在一個(gè)固定的數(shù)上加上一個(gè)數(shù),有什么錯(cuò)誤,改正
int add_n(int n)
{
static int i=100;
i+=n;
return i;
}
答:
因?yàn)閟tatic使得i的值會(huì)保留上次的值。
去掉static就可了
--------------------------------------------------------------------------
23.下面的代碼有什么問(wèn)題?
class A
{
public:
A() { p=this; }
~A() { if(p!=NULL) { delete p; p=NULL; } }
A* p;
};
答:
會(huì)引起無(wú)限遞歸
--------------------------------------------------------------------------
24.
union a {
int a_int1;
double a_double;
int a_int2;
};
typedef struct
{
a a1;
char y;
} b;
class c
{
double c_double;
b b1;
a a2;
};
輸出cout<<sizeof(c)<<endl;的結(jié)果?
答:
VC6環(huán)境下得出的結(jié)果是32
另:
我(sun)在VC6.0+win2k下做過(guò)試驗(yàn):
short - 2
int-4
float-4
double-8
指針-4
sizeof(union),以結(jié)構(gòu)里面size最大的為union的size
----------------------------------------------------------------------------------
25.i最后等于多少?
int i = 1;
int j = i++;
if((i>j++) && (i++ == j)) i+=j;
答:
i = 5
--------------------------------------------------------------------------
26.
unsigned short array[]={1,2,3,4,5,6,7};
int i = 3;
*(array + i) = ?
答:
4
--------------------------------------------------------------------------
27.
class A
{
virtual void func1();
void func2();
}
Class B: class A
{
void func1(){cout << "fun1 in class B" << endl;}
virtual void func2(){cout << "fun2 in class B" << endl;}
}
A, A中的func1和B中的func2都是虛函數(shù).
B, A中的func1和B中的func2都不是虛函數(shù).
C, A中的func2是虛函數(shù).,B中的func1不是虛函數(shù).
D, A中的func2不是虛函數(shù),B中的func1是虛函數(shù).
答:
A
--------------------------------------------------------------------------
28.
數(shù)據(jù)庫(kù):抽出部門(mén),平均工資,要求按部門(mén)的字符串順序排序,不能含有"human resource"部門(mén),
employee結(jié)構(gòu)如下:employee_id, employee_name, depart_id,depart_name,wage
答:
select depart_name, avg(wage)
from employee
where depart_name <> 'human resource'
group by depart_name
order by depart_name
--------------------------------------------------------------------------
29.
給定如下SQL數(shù)據(jù)庫(kù):Test(num INT(4)) 請(qǐng)用一條SQL語(yǔ)句返回num的最小值,但不許使用統(tǒng)計(jì)功能,如MIN,MAX等
答:
select top 1 num
from Test
order by num desc
--------------------------------------------------------------------------
30.
輸出下面程序結(jié)果。
#include <iostream.h>
class A
{
public:
virtual void print(void)
{
cout<<"A::print()"<<endl;
}
};
class B:public A
{
public:
virtual void print(void)
{
cout<<"B::print()"<<endl;
};
};
class C:public B
{
public:
virtual void print(void)
{
cout<<"C::print()"<<endl;
}
};
void print(A a)
{
a.print();
}
void main(void)
{
A a, *pa,*pb,*pc;
B b;
C c;
pa=&a;
pb=&b;
pc=&c;
a.print();
b.print();
c.print();
pa->print();
pb->print();
pc->print();
print(a);
print(b);
print(c);
}
A:
A::print()
B::print()
C::print()
A::print()
B::print()
C::print()
A::print()
A::print()
A::print()
--------------------------------------------------------------------------
31.
試編寫(xiě)函數(shù)判斷計(jì)算機(jī)的字節(jié)存儲(chǔ)順序是開(kāi)序(little endian)還是降序(bigendian)
答:
bool IsBigendian()
{
unsigned short usData = 0x1122;
unsigned char *pucData = (unsigned char*)&usData;
return (*pucData == 0x22);
}
--------------------------------------------------------------------------
32.簡(jiǎn)述Critical Section和Mutex的不同點(diǎn)
答:
對(duì)幾種同步對(duì)象的總結(jié)
1.Critical Section
A.速度快
B.不能用于不同進(jìn)程
C.不能進(jìn)行資源統(tǒng)計(jì)(每次只可以有一個(gè)線程對(duì)共享資源進(jìn)行存取)
2.Mutex
A.速度慢
B.可用于不同進(jìn)程
C.不能進(jìn)行資源統(tǒng)計(jì)
3.Semaphore
A.速度慢
B.可用于不同進(jìn)程
C.可進(jìn)行資源統(tǒng)計(jì)(可以讓一個(gè)或超過(guò)一個(gè)線程對(duì)共享資源進(jìn)行存取)
4.Event
A.速度慢
B.可用于不同進(jìn)程
C.可進(jìn)行資源統(tǒng)計(jì)
--------------------------------------------------------------------------
33.一個(gè)數(shù)據(jù)庫(kù)中有兩個(gè)表:
一張表為Customer,含字段ID,Name;
一張表為Order,含字段ID,CustomerID(連向Customer中ID的外鍵),Revenue;
寫(xiě)出求每個(gè)Customer的Revenue總和的SQL語(yǔ)句。
建表
create table customer
(
ID int primary key,Name char(10)
)
go
create table [order]
(
ID int primary key,CustomerID int foreign key references customer(id) , Revenue float
)
go
--查詢(xún)
select Customer.ID, sum( isnull([Order].Revenue,0) )
from customer full join [order]
on( [order].customerid=customer.id )
group by customer.id
--------------------------------------------------------------------------
34.請(qǐng)指出下列程序中的錯(cuò)誤并且修改
void GetMemory(char *p){
p=(char *)malloc(100);
}
void Test(void){
char *str=NULL;
GetMemory=(str);
strcpy(str,"hello world");
printf(str);
}
A:錯(cuò)誤--參數(shù)的值改變后,不會(huì)傳回
GetMemory并不能傳遞動(dòng)態(tài)內(nèi)存,Test函數(shù)中的 str一直都是 NULL。
strcpy(str, "hello world");將使程序崩潰。
修改如下:
char *GetMemory(){
char *p=(char *)malloc(100);
return p;
}
void Test(void){
char *str=NULL;
str=GetMemory(){
strcpy(str,"hello world");
printf(str);
}
方法二:void GetMemory2(char **p)變?yōu)槎?jí)指針.
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
--------------------------------------------------------------------------
35.程序改錯(cuò)
class mml
{
private:
static unsigned int x;
public:
mml(){ x++; }
mml(static unsigned int &) {x++;}
~mml{x--;}
pulic:
virtual mon() {} = 0;
static unsigned int mmc(){return x;}
......
};
class nnl:public mml
{
private:
static unsigned int y;
public:
nnl(){ x++; }
nnl(static unsigned int &) {x++;}
~nnl{x--;}
public:
virtual mon() {};
static unsigned int nnc(){return y;}
......
};
代碼片斷:
mml* pp = new nnl;
..........
delete pp;
A:
基類(lèi)的析構(gòu)函數(shù)應(yīng)該為虛函數(shù)
virtual ~mml{x--;}
--------------------------------------------------------------------------
36.101個(gè)硬幣100真、1假,真假區(qū)別在于重量。請(qǐng)用無(wú)砝碼天平稱(chēng)兩次給出真幣重還是假幣重的結(jié)論。
答:
101個(gè)先取出2堆,
33,33
第一次稱(chēng),如果不相等,說(shuō)明有一堆重或輕
那么把重的那堆拿下來(lái),再放另外35個(gè)中的33
如果相等,說(shuō)明假的重,如果不相等,新放上去的還是重的話,說(shuō)明假的輕(不可能新放上去的輕)
第一次稱(chēng),如果相等的話,這66個(gè)肯定都是真的,從這66個(gè)中取出35個(gè)來(lái),與剩下的沒(méi)稱(chēng)過(guò)的35個(gè)比
下面就不用說(shuō)了
方法二:
第3題也可以拿A(50),B(50)比一下,一樣的話拿剩下的一個(gè)和真的比一下。
如果不一樣,就拿其中的一堆。比如A(50)再分成兩堆25比一下,一樣的話就在
B(50)中,不一樣就在A(50)中,結(jié)合第一次的結(jié)果就知道了。
--------------------------------------------------------------------------
37.static變量和static 函數(shù)各有什么特點(diǎn)?
答:
static變量:在程序運(yùn)行期內(nèi)一直有效,如果定義在函數(shù)外,則在編譯單元內(nèi)可見(jiàn),如果在函數(shù)內(nèi),在在定義的block內(nèi)可見(jiàn);
static函數(shù):在編譯單元內(nèi)可見(jiàn);
--------------------------------------------------------------------------
38.用C 寫(xiě)一個(gè)輸入的整數(shù),倒著輸出整數(shù)的函數(shù),要求用遞歸方法 ;
答:
void fun( int a )
{
printf( "%d", a%10 );
a /= 10;
if( a <=0 )return;
fun( a );
}
--------------------------------------------------------------------------
39.寫(xiě)出程序結(jié)果:
void Func(char str[100])
{
printf("%d\n", sizeof(str));
}
答:
4
分析:
指針長(zhǎng)度
--------------------------------------------------------------------------
40.int id[sizeof(unsigned long)];
這個(gè)對(duì)嗎?為什么??
答:對(duì)
這個(gè) sizeof是編譯時(shí)運(yùn)算符,編譯時(shí)就確定了
可以看成和機(jī)器有關(guān)的常量。