1樓:陳士胃
1,a2, a
3, a分析如下:
1,n++與++n,前者是先用n的原值(還未增1)進行運算,運算完畢後再另行單獨增1,後者其實是將n+1作為n的值參與運算的,運算以一條語句為準(即以分號結束),如n++;與語句++n;就是一樣的,因為大家最終都完成了增1,它們的不同只是體現在運算表示式中!
2,先用x的值,即11去乘1,當然仍然為11(注意是整型的),再用11去對3取整,自然就是3了。
3,對於\運算,是這樣的,若上下都是整型的,則是取整。若有一個不是整型的,則理解為通常的除法運算,所以要保證運算的精確,必需強制轉換其中的一個。這裡(float)就起這個作用!
4,這就是前面說的前增量與後增量的問題了,你可以照上面分析的去試一下,答案是:28(實際的表示式為:16+3-5,結果再去乘以2得到的。
最後:好好學習,天天向上啊。呵呵!
2樓:匿名使用者
後++表示運算結速後再對變數本身加一 因為是x++不是++x,所以運算式中x值還是11,然後是11*1,為11,然後"/"號進行整除運算,得3
如果運算式中各運算元均為整數,則"/"運算是整除運算,1整除以一個大於一本身的數則得0;所以要對進行第一步運算的變數進行強制轉換成浮點數,同樣也可以。
因為有++c,所以先進行c加一運算,可化為a*=16+3-5,得a*=14,可化為a=a*14,a=2*14,a=28
3樓:匿名使用者
如果是k=++n,那麼等價n=n+1 ,k=n
2 x++*1/3=3 道理和上面一樣,x++*1/3等價x*1/3,x++
其他的自己用上面的原理分析吧。
向前輩們請教下c語言, *p=a[1]和*p=&a[1]都是表達一個意思吧
4樓:
不是一個意思, *p=a[1]這個的含義是指標p指向陣列a[1] 的值;
而*p=&a[1]表示指標p指向a[1]的地址;
5樓:匿名使用者
不是一個意思。
前面一個是把a[1]的值賦給*p
後面一個是把a[1]的地址賦給*p
6樓:匿名使用者
a是一個數抄組名 本身確實是一個指標, 同時a[1]就是表示偏移量為一的變數, 即為一個int型別的變數 &a[1] 是取這個a[1]的地址 也就是它是一個指標。
*p = int *p = 指標 當然不一樣前面一個是把a[1]的值賦給*p,也就是說把 p指向的是a的地址。
後面一個是把a[1]的地址賦給*p ,也就是說p指向的是a[1]的地址的地址。
7樓:匿名使用者
不是,*p=a[1]是指將a[1]的值存放到指標p的地址上;而]*p=&a[1]就是將指標p指向]a[1]的地址。
8樓:匿名使用者
執行 *p = a[1]之後
執行 *p = a[1]之後
9樓:夏天的雪
*是取內容的意思。
&是取地址的意思。
指標只能指向某個地址。
a就代表陣列a的首地址。
10樓:匿名使用者
不是的&是取地址的。
*是取值的。
c語言有關共用體的使用方法,請前輩們請教謝謝啦!
11樓:自我程式設計
共用體又稱聯合體,關鍵字union,正如其名字,其成員變數共同佔用同一段記憶體,這段記憶體的大小就是所有成員中最大的那個,所以整個共用體變數大小就是其最大成員大小,比如你**中的a大小就是成員c的大小8個位元組。
至於用處還是有很多的:
比如我們表示一個學生分數,有幼兒,小學,初中,這三種學生資訊結構基本相同,但只有分數標準不一樣,幼兒分數(差、中、優),小學(c、b、a),初中(0~100分)。那麼我們就可以把學生資訊定義成結構體,而結構成員分數那一塊定義成共用體(包含字串型別,字元型別、數值型別)。這樣結構本身就不需要定義三種型別成員了。
又比如,資料傳遞時,用共用體表示資料,之後只要按照你的需求按不同格式獲取資料。
12樓:一縷青塵
共同體就是用同一塊記憶體畫上不同的符號來表示不同的意思。共同體總記憶體大小是共同體裡面定義的最大的資料型別變數的大小。如果你覺得抽象,我舉個例子跟你說明。
假如你有一個杯子,你用紅筆在杯口上畫了一個刻度叫a,然後用綠筆在一個橘子的直徑的高度的地方畫了一個刻度叫b,再用藍筆在杯子的中間處畫了一個刻度叫c。現在我們規定,這個杯子每次只能放一樣東西,比如倒一杯水,放一個橘子,放半杯瓜子等等,然後你分別按a、b、c的高度所佔據的空間拿出裡面的東西,你想想會怎麼樣。這樣你就能理解了。
至於為什麼這樣設計,在檔案格式解析的時候特別有用。我舉個例子,假如定義了兩種檔案格式頭,這兩種檔案格式頭記憶體劃分不一樣,但記憶體大小一樣,這時候我們可以定義一個共同體,定義兩種記憶體劃分方式,然後只讀一次檔案頭進來,就可以直接解析檔案,如果第一個位元組是1,那麼是檔案a,按檔案a的刻度去取資料,如果第一個位元組是b,就按b的刻度去取資料。這樣就不用重新分配記憶體來適應不同格式劃分,提高效率。
13樓:匿名使用者
共用體內的變數公用一塊記憶體,所以改一個其他的也跟著變動。對於以前的小記憶體機子,或者各種嵌入式小記憶體裝置,共用體用於節省記憶體。現在的話其實沒多大必要了,知道這個概念就差不多了。
14樓:沙裡波特
共同體的儲存區域,是共用的。
三個變數的內容,佔用同一區域。
改動一個,全都變。
請問前輩們,c語言單向連結串列的倒置該如何理解啊,我畫圖了,也想了很長時間,可是好像還是理解不好。那個 30
15樓:匿名使用者
int *p,*q, *r; p=q,q=r 這種能理解嗎?
你把連結串列中的每一項都看成是一個「整數」不就行了。
16樓:一縷青塵
這個容易,你找幾張卡片,分正反兩面,正面分兩部分,一部分用來給本卡片起個名字,另一部分寫下一張卡片的名字,做成單連結串列形式,最後一張卡片由於後面沒有人了,所以它的第二部分寫著null。再拿一張特殊的卡片,這張卡片自己沒有名字,但正反兩面都記錄著剛才第一個人的名字。現在把所有卡片都蓋過來,讓自己看不見正面,打亂。
然後你再拿一張空白卡片再手中,這張卡片不能同時寫兩個人的名字,但可以修改,現在要你把這些卡片倒序。第一部分是本名,不允許修改,只能改第二部分,而且不能同時寫兩個名字在第二部分,你怎麼做?
c語言指標的問題:請問下c語言前輩們,是不是訪問越界造成的calloc建立失敗?或者是指標訪問違規? 10
自己寫的c語言一個串列埠接收fifo,調了好久就是找不出問題,問題應該出在fifo本身,請前輩們高手指點迷津
17樓:我回來了呼叫
你得註釋, 越看頭越大,unsigned char fifo_head=0; /往fifo寫入資料時的位置。
unsigned char fifo_tail=0; /讀出fifo時的位置。
unsigned char rx1_pos=0; /當前的接收位置。
unsigned char rx1_num=0; /資料長度。
unsigned char frame_in=0; /幀頭有效標記。
unsigned char frame_state=0; /幀狀態標記。
unsigned char frame_cnt = 0; /幀接收計數。
unsigned char xdata fifo[256]; 串列埠接收資料fifo
unsigned char xdata uart_buf[48]; 串列埠資料操作儲存器。
void uart0_interrupt(void) interrupt 4
else}}void get_rx1_cmd(void)
else return;
if(!frame_in &&r_data==0x5a)
if(!frame_in)
break;
case 1: /rx1_num: 幀起始標記, 與幀頭的意義有點重複,不如改成幀長度,設定可變長度的幀會更加靈活。
uart0_buf[rx1_pos]=r_data;
frame_state = 2;
frame_cnt = rx1_pos + 3;
rx1_pos+=1;
break;
case 2: /幀長度為3
if(frame_cnt >=rx1_pos) else
default:
frame_state=0; /如果出錯, 將拋棄當前幀。
frame_in=0;
rx1_pos=0;
break;}}
18樓:匿名使用者
沒看出來, 單步看下。
c語言前輩們,怎麼用getch()巧妙代替kbhit()的功能?
向前輩們請教日語學習方法
絕對是我自己親自寫的話.日語畢竟也是一門外語不是麼?所以學法都是一樣的 學日語你也別想一口吃個胖子 誰都是從50音圖學起來的 只是每個人接受能力不同而學的進度不同罷了 1.最重要的是發音一定要準.2.看書或是看資料的時候不讀不出來的漢字很多吧?所以從單詞開始記 也不要盲目著去記 就算當天記住了 幾天...
幾道C語言題目,一道c語言題目
1.為了方便敘述,現將程式的沒一行進行編號。注 語句 for i 0 i void main 注 n j n i 1 等效於n j n j n i 1 1 4 比較簡單,就不說了。具體說說 5 7 是怎麼執行的。具體過程如下 首先,對 i 進行賦值,i 0時,j 分別等於 0,1,2.把 i,j 的...
請教c語言高手很多題目不會做,請教C語言高手,很多題目不會做。。
永兵 1,選d 017為8進位制數,表示十進位制中的15,而 k 是先加一後輸出,故為16 printf x n g 表示以16進位制的形式輸出 g 的值,先輸出後加一,故為75 2,選d int x 10 定義了10個單位大的整型陣列,故10x4 40 4,選d stringlen計算的是 0 前...