你們要的C語言精華,年薪100萬的行業

2020-12-19 程序check

一.指針。

它的本質是地址的類型。在許多語言中根本就沒有這個概念。但是它卻正是C靈活,高效,在面向過程的時代所向披靡的原因所在。因為C的內存模型基本上對應了現在von Neumann(馮·諾伊曼)計算機的機器模型,很好的達到了對機器的映射。不過有些人似乎永遠也不能理解指針【注1】。

注1:Joel Spolsky就是這樣認為的,他認為對指針的理解是一種aptitude,不是通過訓練就可以達到的

http://www.joelonsoftware.com/printerFriendly/articles/fog0000000073.html

指針可以指向值、數組、函數,當然它也可以作為值使用。

看下面的幾個例子:

int* p;//p是一個指針,指向一個整數

int** p;//p是一個指針,它指向第二個指針,然後指向一個整數

int (*pa)[3];//pa是一個指針,指向一個擁有3個整數的數組

int (*pf)();//pf是一個指向函數的指針,這個函數返回一個整數

後面第四節我會詳細講解標識符(identifier)類型的識別。

1.指針本身的類型是什麼?

先看下面的例子:int a;//a的類型是什麼?

對,把a去掉就可以了。因此上面的4個聲明語句中的指針本身的類型為:

int*

int**

int (*)[3]

int (*)()

它們都是複合類型,也就是類型與類型結合而成的類型。意義分別如下:

point to int(指向一個整數的指針)

pointer to pointer to int(指向一個指向整數的指針的指針)

pointer to array of 3 ints(指向一個擁有三個整數的數組的指針)

pointer to function of parameter is void and return value is int (指向一個函數的指針,這個函數參數為空,返回值為整數)

2.指針所指物的類型是什麼?

很簡單,指針本身的類型去掉 「*」號就可以了,分別如下:

int

int*

int ()[3]

int ()()

3和4有點怪,不是嗎?請擦亮你的眼睛,在那個用來把「*」號包住的「()」是多餘的,所以:

int ()[3]就是int [3](一個擁有三個整數的數組)

int ()()就是int ()(一個函數,參數為空,返回值為整數)【注2】

注2:一個小小的提醒,第二個「()」是一個運算符,名字叫函數調用運算符(function call operator)。

3.指針的算術運算。

請再次記住:指針不是一個簡單的類型,它是一個和指針所指物的類型複合的類型。因此,它的算術運算與之(指針所指物的類型)密切相關。

int a[8];

int* p = a;

int* q = p + 3;

p++;

指針的加減並不是指針本身的二進位表示加減,要記住,指針是一個元素的地址,它每加一次,就指向下一個元素。所以:

int* q = p + 3;//q指向從p開始的第三個整數。

p++;//p指向下一個整數。

double* pd;

……//某些計算之後

double* pother = pd – 2;//pother指向從pd倒數第二個double數。

4.指針本身的大小。

在一個現代典型的32位機器上【注3】,機器的內存模型大概是這樣的,想像一下,內存空間就像一個連續的房間群。每一個房間的大小是一個字節(一般是二進位8位)。有些東西大小是一個字節(比如char),一個房間就把它給安置了;但有些東西大小是幾個字節(比如double就是8個字節,int就是4個字節,我說的是典型的32位),所以它就需要幾個房間才能安置。

注3:什麼叫32位?就是機器CPU一次處理的數據寬度是32位,機器的寄存器容量是32位,機器的數據,內存地址總線是32位。當然還有一些細節,但大致就是這樣。16位,64位,128位可以以此類推。

這些房間都應該有編號(也就是地址),32位的機器內存地址空間當然也是32位,所以房間的每一個編號都用32位的二進位數來編碼【注4】。請記住指針也可以作為值使用,作為值的時候,它也必須被安置在房間中(存儲在內存中),那麼指向一個值的指針需要一個地址大小來存儲,即32位,4個字節,4個房間來存儲。

注4:在我們平常用到的32位機器上,絕少有將32位真實內存地址空間全用完的(232 = 4G),即使是伺服器也不例外。現代的作業系統一般會實現32位的虛擬地址空間,這樣可以方便運用程序的編制。關於虛擬地址(線性地址)和真實地址的區別以及實現,可以參考《Linux原始碼情景分析》的第二章存儲管理,在網際網路上關於這個主題的文章汗牛充棟,你也可以google一下。

但請注意,在C++中指向對象成員的指針(pointer to member data or member function)的大小不一定是4個字節。為此我專門編制了一些程序,發現在我的兩個編譯器(VC7.1.3088和Dev-C++4.9.7.0)上,指向對象成員的指針的大小沒有定值,但都是4的倍數。不同的編譯器還有不同的值。對於一般的普通類(class),指向對象成員的指針大小一般為4,但在引入多重虛擬繼承以及虛擬函數的時候,指向對象成員的指針會增大,不論是指向成員數據,還是成員函數。【注5】。

注5:在Andrei Alexandrescu的《Modern C++ Design》的5.13節Page124中提到,成員函數指針實際上是帶標記的(tagged)unions,它們可以對付多重虛擬繼承以及虛擬函數,書上說成員函數指針大小是16,但我的實踐告訴我這個結果不對,而且具體編譯器實現也不同。一直很想看看GCC的原始碼,但由於旁騖太多,而且心不靜,本身難度也比較高(這個倒是不害怕^_^),只有留待以後了。

還有一點,對一個類的static member來說,指向它的指針只是普通的函數指針,不是pointer to class member,所以它的大小是4。

5.指針運算符&和*

它們是一對相反的操作,&取得一個東西的地址(也就是指針),*得到一個地址裡放的東西。這個東西可以是值(對象)、函數、數組、類成員(class member)。

其實很簡單,房間裡面居住著一個人,&操作只能針對人,取得房間號碼;

*操作只能針對房間,取得房間裡的人。

參照指針本身的類型以及指針所指物的類型很好理解。

小結:其實你只要真正理解了1,2,就相當於掌握了指針的牛鼻子。後面的就不難了,指針的各種變化和C語言中其它普通類型的變化都差不多(比如各種轉型)。

二.數組。

在C語言中,對於數組你只需要理解三件事。

1.C語言中有且只有一維數組。

所謂的n維數組只是一個稱呼,一種方便的記法,都是使用一維數組來仿真的。

C語言中數組的元素可以是任何類型的東西,特別的是數組作為元素也可以。所以int a[3][4][5]就應該這樣理解:a是一個擁有3個元素的數組,其中每個元素是一個擁有4個元素的數組,進一步其中每個元素是擁有5個整數元素的數組。

是不是很簡單!數組a的內存模型你應該很容易就想出來了,不是嗎?:)

2.數組的元素個數,必須作為整數常量在編譯階段就求出來。

int i;

int a;//不合法,編譯不會通過。

也許有人會奇怪char str[] = 「test」;沒有指定元素個數為什麼也能通過,因為編譯器可以根據後面的初始化字符串在編譯階段求出來,

不信你試試這個:int a[];

編譯器無法推斷,所以會判錯說「array size missing in a」之類的信息。不過在最新的C99標準中實現了變長數組【注6】

注6:如果你是一個好奇心很強烈的人,就像我一樣,那麼可以查看C99標準6.7.5.2。

3.對於數組,可以獲得數組第一個(即下標為0)元素的地址(也就是指針),從數組名獲得。

比如int a[5]; int* p = a;這裡p就得到了數組元素a[0]的地址。

其餘對於數組的各種操作,其實都是對於指針的相應操作。比如a[3]其實就是*(a+3)的簡單寫法,由於*(a+3)==*(3+a),所以在某些程序的代碼中你會看到類似3[a]的這種奇怪表達式,現在你知道了,它就是a[3]的別名。還有一種奇怪的表達式類似a[-1],現在你也明白了,它就是* (a-1)【注7】。

注7:你肯定是一個很負責任的人,而且也知道自己到底在幹什麼。你難道不是嗎?:)所以你一定也知道,做一件事是要付出成本的,當然也應該獲得多於成本的回報。

我很喜歡經濟學,經濟學的一個基礎就是做什麼事情都是要花成本的,即使你什麼事情也不做。時間成本,金錢成本,機會成本,健康成本……可以這樣說,經濟學的根本目的就是用最小的成本獲得最大的回報。

所以我們在自己的程序中最好避免這種邪惡的寫法,不要讓自己一時的智力過剩帶來以後自己和他人長時間的痛苦。用韋小寶的一句話來說:「賠本的生意老子是不幹的!

但是對邪惡的了解是非常必要的,這樣當我們真正遇到邪惡的時候,可以免受它對心靈的困擾!

對於指向同一個數組不同元素的指針,它們可以做減法,比如int* p = q+i;p-q的結果就是這兩個指針之間的元素個數。i可以是負數。但是請記住:對指向不同的數組元素的指針,這樣的做法是無用而且邪惡的!

對於所謂的n維數組,比如int a[2] [3];你可以得到數組第一個元素的地址a和它的大小。*(a+0)(也即a[0]或者*a)就是第一個元素,它又是一個數組int[3],繼續取得它的第一個元素,*(*(a+0)+0)(也即a[0][0]或者*(*a)),也即第一個整數(第一行第一列的第一個整數)。如果採用這種表達式,就非常的笨拙,所以a[0][0]記法上的簡便就非常的有用了!簡單明了!

對於數組,你只能取用在數組有效範圍內的元素和元素地址,不過最後一個元素的下一個元素的地址是個例外。它可以被用來方便數組的各種計算,特別是比較運算。但顯然,它所指向的內容是不能拿來使用和改變的!

關於數組本身大概就這麼多,下面簡要說一下數組和指針的關係。它們的關係非常曖昧,有時候可以交替使用。

比如 int main(int args, char* argv[])中,其實參數列表中的char* argv[]就是char** argv的另一種寫法。因為在C語言中,一個數組是不能作為函數引數(argument)【注8】直接傳遞的。因為那樣非常的損失效率,而這點違背了C語言設計時的基本理念——作為一門高效的系統設計語言。

注8:這裡我沒有使用函數實參這個大陸術語,而是運用了臺灣術語,它們都是argument這個英文術語的翻譯,但在很多地方中文的實參用的並不恰當,非常的勉強,而引數表示被引用的數,很形象,也很好理解。很快你就可以像我一樣適應引數而不是實參。

dereferance,也就是*運算符操作。我也用的是提領,而不是解引用。

我認為你一定智勇雙全:既有寬容的智慧,也有面對新事物的勇氣!你不願意承認嗎?:)

所以在函數參數列表(parameter list)中的數組形式的參數聲明,只是為了方便程式設計師的閱讀!比如上面的char* argv[]就可以很容易的想到是對一個char*字符串數組進行操作,其實質是傳遞的char*字符串數組的首元素的地址(指針)。其它的元素當然可以由這個指針的加法間接提領(dereferance)【參考注8】得到!從而也就間接得到了整個數組。

但是數組和指針還是有區別的,比如在一個文件中有下面的定義:

char myname[] = 「wuaihua」;

而在另一個文件中有下列聲明:

extern char* myname;

它們互相是並不認識的,儘管你的本義是這樣希望的。

它們對內存空間的使用方式不同【注9】。

對於char myname[] = 「wuaihua」如下

myname

w

u

a

i

h

u

a

\0

對於char* myname;如下表

myname

\|/

w

u

a

i

h

u

a

\0

注9:可以參考Andrew Konig的《C陷阱與缺陷》4.5節。

改變的方法就是使它們一致就可以了。

char myname[] = 「wuaihua」;

extern char myname[];

或者

char* myname = 「wuaihua」;//C++中最好換成const char* myname = 「wuaihua」。

extern char* myname;

C之詭譎(下)

三.類型的識別。

基本類型的識別非常簡單:

int a;//a的類型是a

char* p;//p的類型是char*

……

那麼請你看看下面幾個:

int* (*a[5])(int, char*); //#1

void (*b[10]) (void (*)()); //#2

doube(*)() (*pa)[9]; //#3

如果你是第一次看到這種類型聲明的時候,我想肯定跟我的感覺一樣,就如晴天霹靂,五雷轟頂,頭昏目眩,一頭張牙舞爪的猙獰怪獸撲面而來。

不要緊(Take it easy)!我們慢慢來收拾這幾個面目可憎的紙老虎!

1.C語言中函數聲明和數組聲明。

函數聲明一般是這樣int fun(int,double);對應函數指針(pointer to function)的聲明是這樣:

int (*pf)(int,double),你必須習慣。可以這樣使用:

pf = &fun;//賦值(assignment)操作

(*pf)(5, 8.9);//函數調用操作

也請注意,C語言本身提供了一種簡寫方式如下:

pf = fun;// 賦值(assignment)操作

pf(5, 8.9);// 函數調用操作

不過我本人不是很喜歡這種簡寫,它對初學者帶來了比較多的迷惑。

數組聲明一般是這樣int a[5];對於數組指針(pointer to array)的聲明是這樣:

int (*pa)[5]; 你也必須習慣。可以這樣使用:

pa = &a;// 賦值(assignment)操作

int i = (*pa)[2]//將a[2]賦值給i;

2.有了上面的基礎,我們就可以對付開頭的三隻紙老虎了!:)

這個時候你需要複習一下各種運算符的優先順序和結合順序了,順便找本書看看就夠了。

#1:int* (*a[5])(int, char*);

首先看到標識符名a,「[]」優先級大於「*」,a與「[5]」先結合。所以a是一個數組,這個數組有5個元素,每一個元素都是一個指針,指針指向「(int, char*)」,對,指向一個函數,函數參數是「int, char*」,返回值是「int*」。完畢,我們幹掉了第一個紙老虎。:)

#2:void (*b[10]) (void (*)());

b是一個數組,這個數組有10個元素,每一個元素都是一個指針,指針指向一個函數,函數參數是「void (*)()」【注10】,返回值是「void」。完畢!

注10:這個參數又是一個指針,指向一個函數,函數參數為空,返回值是「void」。

#3. doube(*)() (*pa)[9];

pa是一個指針,指針指向一個數組,這個數組有9個元素,每一個元素都是「doube(*)()」【也即一個指針,指向一個函數,函數參數為空,返回值是「double」】。

現在是不是覺得要認識它們是易如反掌,工欲善其事,必先利其器!我們對這種表達方式熟悉之後,就可以用「typedef」來簡化這種類型聲明。

#1:int* (*a[5])(int, char*);

typedef int* (*PF)(int, char*);//PF是一個類型別名【注11】。

PF a[5];//跟int* (*a[5])(int, char*);的效果一樣!

注11:很多初學者只知道typedef char* pchar;但是對於typedef的其它用法不太了解。Stephen Blaha對typedef用法做過一個總結:「建立一個類型別名的方法很簡單,在傳統的變量聲明表達式裡用類型名替代變量名,然後把關鍵字typedef加在該語句的開頭」。可以參看《程式設計師》雜誌2001.3期《C++高手技巧20招》。

#2:void (*b[10]) (void (*)());

typedef void (*pfv)();

typedef void (*pf_taking_pfv)(pfv);

pf_taking_pfv b[10]; //跟void (*b[10]) (void (*)());的效果一樣!

#3. doube(*)() (*pa)[9];

typedef double(*PF)();

typedef PF (*PA)[9];

PA pa; //跟doube(*)() (*pa)[9];的效果一樣!

3.const和volatile在類型聲明中的位置

在這裡我只說const,volatile是一樣的【注12】!

注12:顧名思義,volatile修飾的量就是很容易變化,不穩定的量,它可能被其它線程,作業系統,硬體等等在未知的時間改變,所以它被存儲在內存中,每次取用它的時候都只能在內存中去讀取,它不能被編譯器優化放在內部寄存器中。

類型聲明中const用來修飾一個常量,我們一般這樣使用:const在前面

const int;//int是const

const char*;//char是const

char* const;/

int offset;

} va_list;

其它的定義類似。

經常在Windows進行系統編程的人一定知道函數調用有好幾種不同的形式,比如:

__stdcall,__pascal,__cdecl。在Windows下_stdcall,__pascal是一樣的,所以我只說一下__stdcall和__cdecl的區別。

(1)__stdcall表示被調用端自身負責函數引數的壓棧和出棧。函數參數個數一定的函數都是這種調用形式。

例如:int fun(char c, double d),我們在main函數中使用它,這個函數就只管本身函數體的運行,參數怎麼來的,怎麼去的,它一概不管。自然有main負責。不過,不同的編譯器的實現可能將參數從右向左壓棧,也可能從左向右壓棧,這個順序我們是不能加於利用的【注15】。

注15:你可以在Herb Sutter的《More Exceptional C++》中的條款20:An Unmanaged Pointer Problem, Part 1:Parameter Evaluation找到相關的細節論述。

(2)__cdecl表示調用端負責被調用端引數的壓棧和出棧。參數可變的函數採用的是這種調用形式。

為什麼這種函數要採用不同於前面的調用形式呢?那是因為__stdcall調用形式對它沒有作用,被調用端根本就無法知道調用端的引數個數,它怎麼可能正確工作?所以這種調用方式是必須的,不過由於參數參數可變的函數本身不多,所以用的地方比較少。

對於這兩種方式,你可以編制一些簡單的程序,然後反彙編,在彙編代碼下面你就可以看到實際的區別,很好理解的!

重載函數有很多匹配(match)規則調用。參數為「…」的函數是匹配最低的,這一點在Andrei Alexandrescu的驚才絕豔之作《Modern C++ Design》中就有用到,參看Page34-35,2.7「編譯期間偵測可轉換性和繼承性」。

後記:

C語言的細節肯定不會只有這麼多,但是這幾個出現的比較頻繁,而且在C語言中也是很重要的幾個語言特徵。如果把這幾個細節徹底弄清楚了,C語言本身的神秘就不會太多了。

C語言本身就像一把異常鋒利的剪刀,你可以用它做出非常精緻優雅的藝術品,也可以剪出一些亂七八糟的廢紙片。能夠將一件武器用到出神入化那是需要時間的,需要多長時間?不多,請你拿出一萬個小時來,英國Exter大學心理學教授麥克.侯威專門研究神童和天才,他的結論很有意思:「一般人以為天才是自然而生、流暢而不受阻的閃亮才華,其實,天才也必須耗費至少十年光陰來學習他們的特殊技能,絕無例外。

要成為專家,需要擁有頑固的個性和堅持的能力……每一行的專業人士,都投注大量心血,培養自己的專業才能。」

相關焦點

  • 知乎高贊:女友認為年薪50萬是平均水平,怎麼辦?
    比如最近,一位讀者和我聊起「行業瓶頸」。他說,還是你們搞網際網路好,我在船業幹到30來歲,年薪才20萬。我說,年薪20萬挺不錯的了。他發來個嘆氣的表情:「和你們沒法比啊,網際網路的人動不動就是年薪50萬、100萬。
  • keil C語言與彙編語言混合編程
    無參數傳遞的函數調用C51調用彙編函數1.無參數傳遞的函數調用先來個例子:其中example.c和example.a51為項目中的兩個文件*example.c*extern void delay100();main(){delay100;}*example.a51*?PR?
  • 年薪100萬美金!這家私募海外招聘火了,還報銷回國機票……
    此前曾開出50萬美金年薪招投研人才,但目前崗位仍有空缺。」同時他指出,「雖然有時候看我們開出的條件已經遠遠高於市場平均水平,但是想要找到與崗位十分匹配的人還是挺不容易的。由於信息不對稱等情況,發布招聘信息的效率其實並不高,尤其是對於海外人才而言,所以一般是要靠獵頭去挖人的。」據了解,一般基金管理人需要向獵頭支付薪資但25%作為費用,投入很大。
  • 男人年薪達不到50萬就算沒能力?知乎高贊的話題,你的年薪多少?
    男人年薪達不到50萬就算沒能力?知乎高贊的話題,你的年薪多少?小編看來,在競爭壓力如此強大的社會中,如果畢業之後能找到一份穩定的工作,並且收入還算不錯的話,那已經就是挺不錯的事情了。只不過,前陣子小編在知乎上看到了這樣的一條話題,從話題中可以看出,原來現在大部分的女生,她們覺得自己的男朋友應該年薪60萬,這才是屬於比較正常的現象。因此,這個話題在知乎上也是獲得了高頻率的點讚,大多數女人都很認可。他們認為,只有男人年薪能達到50萬以上,才有真能力。
  • 美國人升職年薪從100萬到150萬,但他拒絕了,理由很中國特色
    年薪100萬的美國人Peter被派到中國深圳任職,2個月前美國總部決定升任他到成都做大區總監,年薪超過150萬。但他婉言拒絕了,理由很中國特色。世界500強的美國公司,8年前外派Peter到中國深圳任職,現在年薪100萬人民幣(15萬美元)。當年為了方便在中國的生活和工作,公司分配給他深圳南山一套102平米的住房。按公司規定外派到國外的員工在當地工作滿10年,可擁有住房的永久使用權。
  • 韓綜藝嘉賓曾列出數據:100億韓元年薪
    但是話說回來了,行業不分高低貴賤,行業存在的真正意義是為了讓一個人、一個家庭有生存依靠的資本,就好像街邊撿破爛的人跟百萬富翁本質上沒有區別,他們都是通過自己的雙手努力來養活自己。而職業選手,也同樣是依靠著雙手來養活自己。但是問題來了,電競選手一年能賺多少錢呢?
  • (精華)C語言為什麼一般不在.h中定義函數或者變量?
    好了,今天的主題是一個大家可能不太關注的主題,不過也是非常有趣的一個主題,大部分C語言模塊設計愛好者早就形成了習慣可能就不會關注這一塊的內容,不過我們今天想拿出來探個究竟.    大部分C編程愛好者都知道,在我們的.h文件裡面經常看到的是函數的聲明、變量的聲明、以及各種各樣的宏等等,而且在我前面的文章中我也提到過C語言的模塊化設計中常常說到對應的.h和.c文件認為是一個對象,那麼.h文件主要是對外的一些接口
  • 年薪百萬的12份音樂行業,你知道幾個?
    據伯克利音樂學院(BerkleeCollege of Music)最近發布的一份報告,音樂行業從業者的平均年薪為55,561美元。超過一半的受訪者表示,自己的收入來自三份或者更多的工作。不過,對於少數幸運的人來說,一份全職工作就能帶來六位數的年薪。
  • 如果是初學C語言請看完,如何學好C語言絕對精品
    既然電腦不是伺應生,聽不懂我們的話,那麼我們要怎麼控制它呢?如果你們給我裝聾作啞,我會告訴你期末掛了你,哦,你立馬老實了!對於電腦,我要怎麼才能使喚它,讓它為我工作呢?不錯,我們有個強力工具,C語言!好,我們把上面的場景複習一下:你要我算100的階乘,於是我去機房上機,編寫了一個程序運行程序,哦,結果出來了!
  • 怎樣學習C語言(獻給迷茫的C愛好者)!
    既然電腦不是伺應生,聽不懂我們的話,那麼我們要怎麼控制它呢?假設你們給我裝聾作啞,我會告訴你期末掛了你,哦,你立刻老實了!對於電腦,我要怎麼才幹使喚它,讓它為我工作呢?不錯,我們有個強力工具,C語言!   好,我們把上面的場景複習一下:你要我算100的階乘,於是我去機房上機,編寫了一個程序:( 參加ppt.)執行程序,哦,結果出來了!
  • 鐵飯碗變成「金飯碗」,教育行業迎來「新升級」,年薪最高達70萬
    那麼在這其中就要今天我們要提到的鐵飯碗可變金飯碗的行業——教師行業,隨著國家重視教育的發展,作為教育的引導者教師,國家也是給予了相當大的重視。雖說目前的社會形勢,教師這個行業對比公務員、事業單位這些崗位來說薪資待遇比較低。
  • 石原裡美老公被揭高產 證券上班年薪逾100萬
    石原聰美指老公是一般男性後,日本社會譁然,熱議究竟是什麼樣的男性可以娶到有「日本發電機」之稱的女神,關係者曝露了石原的老公其實在高盛證券上班,據「週刊文春」報導,30代的高盛上班族年薪都在1500萬日幣到2500萬日幣的區間(港幣為100萬到150萬之間),且在高盛證券上班族在找結婚對象的網站中偏差值為72,是高人氣的金字塔頂端的人,石原聰美所謂的「一般男性」說法實在太謙虛。
  • 學員問:C語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。2、main()——在c語言中稱之為「主函數」,一個c程序有且僅有一個main函數,任何一個c程序總是從main函數開始執行,main函數後面的一對圓括號不能省略。3、被大括號{ }括起來的內容稱為main函數的函數體,這部分內容就是計算機要執行的內容。
  • 2021校招不同行業年薪統計,有的高達16到18薪,你在哪一標準
    ,經過數據統計發現,在2021校招中網際網路行業的年薪水平還是很豐厚的,沒有低於年薪15萬的。 畢業生如果能進入到華為和小米的話,可以拿到14到16薪,不過華為的年薪水平能達到22.4萬—60萬這一水平,小米的年薪水平是18.2萬—40萬,京東雖然是14薪,不過年薪水平可以達到18.2萬—60萬。
  • 超60位年薪過100萬 持股市值超10億元的...
    生肖為鼠的上市公司董事長學歷情況圖從薪酬來看,這280位董事長,年薪超過100萬的有61位。其中,年薪最高的位復星醫藥董事長陳啟宇,其1972年出生,如今48歲,其年薪高達1425.04萬元,也是生肖屬鼠的董事長中薪酬唯一一位超過千萬的。
  • WWE明星薪酬大盤點,她的年薪和萊斯納竟然相差100倍!
    但他在WWE的年薪只有65萬美元,聽起來還是蠻高的,事實卻是他的薪水遭到了不公平待遇。《摔角狂熱33》和他一起回歸WWE的弟弟傑夫·哈迪的年薪卻達100萬美元。而WWE似乎也意識到了這一點,在他的周邊產品售賣上,麥特·哈迪可以獲得2.5%的提成,但他值得獲得更高的提成,更高的薪水。
  • 下一個韋恩斯坦:年薪2500萬美元的國民新聞主播
    TMZ爆料說2006年10月的《今日》節目中,攝影機曾經錄到Lauer在廣告時段對合作搭檔Meredith Vieira說:「這件毛衣不錯,你要多彎腰,這樣『風景』很棒」。這裡簡單介紹一下,根據廣播電視數字新聞協會的數據,美國新聞主播的平均年薪是8.33萬美元,體育主播平均年薪5.6萬美元,天氣預告員的平均年薪6.98萬美元。
  • 年薪20萬男子相親,卻被月薪6k行政嫌棄:男人年薪應該50萬起步
    原來這位男子不是當事人,他說他有一位朋友去相親,他這位朋友的家庭條件並不差,而且他自己年收入是有20萬加,相親對象就只是在一個服裝公司當行政的人,她一個月收入才6000。第一次見面吃飯的時候聊天的節奏都挺好的,覺得兩人挺合得來的。
  • "天才少年"獲華為最高offer:經七輪篩選 年薪201萬
    他說,自己現在肩上責任和壓力更大,要快速融入這個團隊,不僅要把領導分配的事情做好,更要去思考今後該如何做好工作,不負眾望。   張霽說:「每一行只要努力了,都會成為這個行業的工匠。要根據自己的興趣愛好,選擇適合自己學習的專業,才是最好的。」
  • C語言中「c=a+b」,這種結構合理嗎?
    C語言會同意一些"令人震驚"的結構,下面的結構是合法的嗎,我們來看看幾個例子。 c = a+++b; 以下代碼是合法的嗎,咋的一看不禁有這樣的疑問?