今天下午去參加光電實(shí)驗(yàn)室的暑期實(shí)習(xí)生筆試,本來(lái)不大想去的,因?yàn)楫吘故罴僖呀?jīng)確定了實(shí)習(xí),所以即使通過(guò)了也肯定不會(huì)去的,而且到時(shí)候要解釋的話也會(huì)很麻煩,不過(guò)作為國(guó)家重點(diǎn)實(shí)驗(yàn)室,我想看看筆試題目到底怎么樣,也或許是因?yàn)樽罱鼊偤每荚囍芡炅?,閑著蛋疼,所以就跑過(guò)去了。
原題目很簡(jiǎn)單,就是如下:
struct tr t[3] = {5,&t[1],7,&t[2],9,0};
struct tr *p;
p=&t[0];
然后列出了幾個(gè)選項(xiàng),讓說(shuō)出了分別哪一個(gè)表達(dá)式表示的值為6.具體選項(xiàng)就是:
p->n++ ++p->n (*p).n++ ++p->n
當(dāng)然,題目的話選項(xiàng)還有些不記得了,不過(guò)覺得其實(shí)只要理解了原理,那么就很容易判斷了。
先看代碼:
#include <stdio.h>
struct tr{
int n;
struct tr *next;
};
int main(){
struct tr t[3] = {5,&t[1],7,&t[2],9,0};
struct tr *p;
p=&t[0];
printf("p->n++=%d\n",p->n++);
printf("p->n=%d\n",p->n);
printf("*p=%d\n",*p);
printf("(*p).n=%d\n",(*p).n);
printf("(*p).n++=%d\n",(*p).n++);
printf("++p->n=%d\n",++p->n);
}
運(yùn)行結(jié)果如下:
p->n++=5
p->n=6
*p=6
(*p).n=6
(*p).n++=6
++p->n=8
Press any key to continue
首先,看看上面的題目中的那個(gè)初始化的含義吧!
struct tr t[3] = {5,&t[1],7,&t[2],9,0};

注意這樣的一個(gè)結(jié)構(gòu)體式可以初始化的,不同于C++的作用域限定范圍!struct是公有的數(shù)據(jù)訪問權(quán)限。
剩下了的問題就是,各個(gè)的含義是多少了。
p->n 表示的就是p指向的節(jié)點(diǎn)的證書范圍域,所以是5,當(dāng)然:重點(diǎn)來(lái)了,由于是說(shuō)的表達(dá)式的值,所以分為前置和后置表達(dá)式的區(qū)別了。
(關(guān)于前置和后置的區(qū)別見我的這篇博文:http://www.shnenglu.com/deercoder/archive/2010/01/22/106251.aspx
)
如果是p->n++,那么這個(gè)表達(dá)式的值為:5,但是運(yùn)算完成之后,n的值會(huì)變化,所以n的值是6,但是表達(dá)式的值的含義要搞清楚,確切的說(shuō)就是這個(gè)表達(dá)式的結(jié)果,由于后置的++是在完成之后才做的,所以不能影響到表達(dá)式的值,于是就為5。
而前置的++則是先進(jìn)行++運(yùn)算之后才得到運(yùn)算的結(jié)果,所以如果是++p->n的話值就是6.
注意我的這個(gè)Demo的例子中,由于將所有表達(dá)式的值都放在一起輸出,所以前面的操作會(huì)影響后面的值和表達(dá)式。比如第一個(gè)輸出時(shí)5,但是會(huì)修改第一個(gè)節(jié)點(diǎn)的n值變?yōu)?,所以后面的輸出相應(yīng)的要修改!
題目中問的是值,所以直接單個(gè)的輸出也是可以的,注意更能直接的看到結(jié)果。
另外很簡(jiǎn)單的幾點(diǎn)是:
1. p-> 和 *p. 操作時(shí)一樣性質(zhì),一直是直接指針訪問,一個(gè)是用的先訪問節(jié)點(diǎn),然后通過(guò)節(jié)點(diǎn)的域來(lái)得到相應(yīng)的值。
2.運(yùn)算的優(yōu)先級(jí)。注意->和.操作符的運(yùn)算級(jí)都要高些,所以先進(jìn)行的。
3.等價(jià)的寫法。p->n ===========(*p).n
ps:前段時(shí)間忙著準(zhǔn)備考試,考試周當(dāng)然比較忙,而且突然發(fā)現(xiàn)最近博客沒有怎么更新了,說(shuō)明自己常常以各種借口放松對(duì)技術(shù)的學(xué)習(xí),鄙視下自己,總結(jié)下前段時(shí)間的事情吧:
1.準(zhǔn)備考研。說(shuō)是準(zhǔn)備,其實(shí)就是看看單詞,不過(guò)覺得還是比較難,很多不認(rèn)識(shí),由于沒有拿到保底的工作offer,所以現(xiàn)在就只能破釜沉舟了,后面也就沒有參加或者不計(jì)劃參加什么網(wǎng)易游戲,阿里巴巴,百度什么的筆試了,畢竟想起來(lái)要是暑假實(shí)習(xí)就耗上2個(gè)多月或者3個(gè)月的話,考研的事情就會(huì)徹底的泡湯了。
2.軟考。再次華麗麗的裸考,大學(xué)里面的裸考很多啊,四六級(jí)都是,不過(guò)分?jǐn)?shù)不錯(cuò),而且我也比較容易滿足,都是550+,雖然不高,不過(guò)一次性過(guò)了,而且沒有付出的感覺還是很好。這次軟件設(shè)計(jì)的考試,完全都沒有時(shí)間準(zhǔn)備,因?yàn)橛衅谥锌荚嚭蜔o(wú)盡的實(shí)驗(yàn),雖然考到軟件工程和設(shè)計(jì)模式的話我全部都是懵的,不過(guò)上午題目覺得問題不大,而下午的就覺得比較懸了,感覺憑著一點(diǎn)老底子,有一半希望吧。(數(shù)據(jù)流圖,設(shè)計(jì)模式,軟件工程完全不會(huì)啊~~)
3.考試周。昨天才考完,下半學(xué)期又要忙了,沒辦法,先緩緩吧。
posted on 2010-05-29 00:53
deercoder 閱讀(1067)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
C++