牛客(错题集)
1、
void main() {int a=1,b=0,c=-1,d=0;d=++a||++b&&++c;cout<<d<<endl;return; } 1. C/C++中,布爾值作為整型輸出時,表現為:true輸出1,false輸出0; 2. 語句4為邏輯表達式,因此返回值d為1或0; 3. 短路原則:||或操作符左操作數為真,即可停止判斷,返回1。 【解釋】運算符優先級:&& > || > = 所以先計算++b&&++c,++c為0,所以整體是false=0,再計算++a||0,++a為true, 所以整體是true=1,所以d=12、
int a=0; class someClass{int b;static int c; }; int main(){int d=0;someClass *p=new someClass();return 0; } 變量a 全局變量 存放在全局變量區 變量b 類的成員變量 由類的定義決定 在main函數中類A動態分配 因此b在堆區(注意理解b,因為對象有動態分配空間時,里面已經包含了成員變量的空間,所以成員變量也存儲在堆中。) 變量c 靜態成員 靜態存儲區 變量d 局部變量 棧區3、如下哪一段代碼不能給地址0xaae0275c賦值為1?
volatile int *p=(int *)0xaae0275c; *p=1 //對 *(volatile int *)0xaae0275c=1 //對volatile int *p=(int *)0xaae0275c; p[0]=1 //對 (volatile int *)0xaae0275c[0]=1 //錯 【注】任何p[i]實質上都是*(p+i). 【解釋】(volatile int *)0xaae0275c[0]=1為什么錯? []運算符優先級較高,所以先0xaae0275c[0]取出這個地址的值,然后將值強制轉換成int* 指針,再賦值,顯然是錯誤的。 最后相當于int *p; p = 1,顯然是行不通的 【修改成正確的-->加上一對括弧】( (volatile int *)0xaae0275c )[0]=14、
struct st_task {uint16_t id;uint32_t value;uint64_t timestamp; }; void fool() {st_task task = {};uint64_t a = 0x00010001;memcpy(&task, &a, sizeof(uint64_t));printf("%11u,%11u,%11u", task.id, task.value, task.timestamp); } 上述fool()程序的執行結果為() 答:1,0,0
5、string的考點
考點一:分析下列代碼有什么問題?
考點二:寫出完整版的strcpy函數
//為了實現鏈式操作,將目的地址返回,加3分! char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != ‘\0’ ); return address; }考點三:已知類String的原型,編寫類String的構造函數、析構函數和賦值函數
class String { public: String(const char *str = NULL); // 普通構造函數 String(const String &other); // 拷貝構造函數 ~ String(void); // 析構函數 String & operator =(const String &other); // 賦值函數 private: char *m_data; // 用于保存字符串 };6、請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1
int checkCPU() { union w { int a; char b; } c; c.a = 1; return (c.b == 1); }7、請說出static和const關鍵字盡可能多的作用
static關鍵字至少有下列n個作用: (1)函數體內static變量的作用范圍為該函數體,不同于auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值; (2)在模塊內的static全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問; (3)在模塊內的static函數只可被這一模塊內的其它函數調用,這個函數的使用范圍被限制在聲明它的模塊內; (4)在類中的static成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝; (5)在類中的static成員函數屬于整個類所擁有,這個函數不接收this指針,因而只能訪問類的static成員變量。 const關鍵字至少有下列n個作用: (1)欲阻止一個變量被改變,可以使用const關鍵字。在定義該const變量時,通常需要對它進行初始化,因為以后就沒有機會再去改變它了; (2)對指針來說,可以指定指針本身為const,也可以指定指針所指的數據為const,或二者同時指定為const; (3)在一個函數聲明中,const可以修飾形參,表明它是一個輸入參數,在函數內部不能改變其值; (4)對于類的成員函數,若指定其為const類型,則表明其是一個常函數,不能修改類的成員變量; (5)對于類的成員函數,有時候必須指定其返回值為const類型,以使得其返回值不為“左值”。例如: const classA operator*(const classA& a1,const classA& a2); operator*的返回結果必須是一個const對象。如果不是,這樣的變態代碼也不會編譯出錯: classA a, b, c; (a * b) = c; // 對a*b的結果賦值 操作(a * b) = c顯然不符合編程者的初衷,也沒有任何意義。總結
- 上一篇: 错误:返回局部变量数组名 \ 解决方案
- 下一篇: 第一天2017/03/28