1樓:
呵呵 這個 容易啊 就是個 強制型別轉換的意思。
首先 long 型別 佔 四個位元組。
char 型別 佔 一個位元組。
明白了這個 就好解決了。
char *p="abcdefgh",*r;
long *q;
這兩行 標明 p是指向字元的指標 並且 指向abcdefgh這個字串(實際是指向a)
r 為指向字元的指標。
q 為指向長整形的指標。
下面 q=(long *)p; 這一步 吧p這個指向字元的指標 強制轉換成了 指向長整形的 指標 把值 賦予 q (這個解釋夠直接吧) 具體的 由於 長整形是四個位元組 所以 現在 p指向型別 就以 四個位元組為一個單位 移動了 (但是 其值 任然 a的地址 只是 移動的單位變數 ——原來是 一個位元組,現在是四個位元組啦)
先後 q++就很好理解了。
移動的 步長 是四個位元組 那麼 自然 q++之後 q就指向了 e了 (實際有個公式 好像。
是 (q++)q+sizeof(q所指型別) 大概就是這麼個意思 (strlen就是 求 此型別 的位元組數)
然後 r的情況 就類似啦 反過來 就行啦 q又被強制轉換成 指向字元型別的啦 現在 步長又是一個位元組啦 (具體原理 與上面所說 類似)
最後。printf("%s",r); 就是列印出 r所指字串的值啦 (雖然r是指向字元型別 但注意 是%s 是列印字串,如果是 %c 那列印的就是e)
具體 字元指標列印字串是這樣的 , 函式自動 從當前指標指向位置(e的位置)像後掃描,知道找到 \0 然後 將 這個字串序列列印出來。
前面 *p="abcdefgh", 賦值是 h後面系統自動加上了 \0的 只是 顯示不出來而已 (這才是 他成為一個字串的 標誌 結尾標誌)
答案自然是 efgh 啦。
解釋完畢 希望有幫助。
2樓:匿名使用者
q=(long*)p意思是把指向字元陣列的指標p強制轉換成指向long (int)的指標;
q其實也是指向那個字串的(存放的是字串的首地址),q++是跳4個位元組(即指向di五個字元的地址)
再讓r也指在此處,顧輸出的是第五個字元以及以後的字元,即efgh
3樓:原味三分甜咩
q=(long*)p; /強制轉換p的資料型別,轉換成long型,long佔4個位元組,指向e*/
r=(char*)q; /強制轉換q的資料型別,轉換成char型,並把r的首地址指向e,故輸出的就是efgh*/
求解一道c語言題目
4樓:匿名使用者
++和--執行優先於*
所以,語句b=++a*--a是如下執行:
先是++a,a=6;接著是--a,a=5;
最後執行*,此時的a=5;所以b=5*5=25
5樓:sky_淺眉
++和--執行優先於*
所以執行完++ 後才執行*
所以結果是25 還有什麼叫機試結果為30,我想不通你那什麼年代的電腦了。
6樓:網友
結果可能取決於編譯器,我執行的結果是30,也是容易理解的答案,所以問題本身有問題,而且實際程式設計中絕對避免這種表示式,軟體開發不是做題。
求解一道c語言題目
請教高手一道c語言題 15
7樓:水墨江南客
樣例輸入 4 表示有四組輸入。
然後對應的5 | 9 | 16 | 11就是四個輸入輸入5 對應的輸出 5
輸入9 對應的輸出9 7 11 17 13 5輸入16對應的輸出no number can be output !
輸入11對應的輸出11 17 13 5
問一道c語言的題
8樓:在岸上的魚
int a[3][2]為一個三行兩列的元素1 2
*p[3]為指標陣列,陣列中的每個元素都是整形的指標。
a[1]為指向二維陣列第二行首地址的指標。
p[0]=a[1],使p[0]也指向陣列的第二行的首地址p[0]+1,移動指標p[0]使之挪動一個單元即指向第二行第二個元素*(p[0]+1)取出p[0]所指單元的內容即a[1][1]
9樓:匿名使用者
p[0]=a[1]這個是行座標,如果只是*(p[0])即為a[1][0]。可是它+1,+1是找列座標啊,就變成a[1][1]。
10樓:大雪滿弓刀楊炯
在2維陣列中a[1]的意思就是陣列第二行的首地址,將它賦值給指標陣列p[0],而p[0]指向行的指標陣列,所以p[0]+1就是a[1][1]的地址,所以*(p[0]+1)就是a[1][1]了,還是不明白的話,看看c語言中將指標的那部分,、、
11樓:匿名使用者
沒有錯, 具體我也不知道怎麼說,書上就是這麼規定的,《c程式設計》--譚浩強 看了指標就知道了。
12樓:鼴鼠可可
p[0]=a[1];說明p[0]是指向a[1]的,記錄的是a[1]的地址從,那開始,所以是a[1][1])
13樓:匿名使用者
指標陣列p的第一個地址指向陣列a 則*(p[0]+1)即表示a[1][1])啊 依此*(p[0]+2)表示a[1][2] 這是一種表示方法啊 記住就行了。
14樓:金蔚逮忻歡
fun函式中定義的a為靜態變數,只初始化一次main函式開始執行,你的程式有點錯。
voidmain()
如果是這樣的話。
那麼輸出的結果為。
246輸出的換行在for語句全部執行完以後輸出沒意義void
main()
}如果這樣的話。
結果就是24
6每呼叫一次fun後輸出一個換行。
15樓:聊慶赫連含煙
fun函式中a是靜態資料型別static,就是說它初始化後在記憶體中就有個固定的地址,函式返回後a仍然存在。
每次呼叫fun函式後a的值都會加2,所以最後的結果就是246printf(""
//表示換行。
求做一道c語言題目
16樓:匿名使用者
c++的。
#include
using namespace std;
int main()
{static const int gounianyear = 2006;
cout<<"輸入一個21世紀的狗年"<>yearget;
if(0 ==yearget-gounianyear)%12){for(;yearget<3000; )cout<
17樓:最終幻夜
#include
int main()
int n,i;
scanf("%d",&n);
for(i=0;i<8;i++)
if(dogyear[i]>=n)
printf("%d ",dogyear[i]);
}您好 不知道這樣是否滿足您的要求 望採納。
18樓:小菜鳥2無聊寫**
樓主,樓上不太會說話,不要理,等等我貼出**。沒有其他語言基礎的c語言初學者起步是慢了一點,但是要渣油~
#include
int main()
return 0;}
求解一道c語言簡單題目
19樓:步行者
選擇c資料庫中關係除法,是這樣的:
比如r除以s,則首先在r中查詢與s的對應項,題目r中只有第三條記錄是符合條件的,r sa b c a bc 3 1 c 3當r除以s後得到的是剩下的列屬性,即c
求解一道C語言題,求解一道C語言題目
不考慮效能優化,只考慮功能可以這麼寫 include stdio.h include string.h define max str len 128int main char str2 max str len scanf s s str1,str2 for i 0 i strlen str1 i e...
c語言一道題目求教教,C語言一道題目,求教教
號和四門功課的成績從鍵盤讀入。2 計算每個學生的總分和平均分。3 按平均成績進行排序,輸出 愛吃米糕 親,這個最基本的,你要自己練習才能慢慢寫出程式啊 小輝丿仔 這個你得自己做 給你提醒一下,可以陣列做 include include define null0 define len sizeof s...
一道簡單的c語言題目,一道簡單的C語言題目
s 2 是一個指標陣列,指向兩個字串 s 0 s 1 while s 1 0 迴圈,條件為 s 1 0 字串的最後一個值是 0 這裡遍歷s 1 字串,一共會遍歷4次。 寒鐵礦 你定義了一個指標陣列,s 0 指向的是第一個 字串的起始地址,s 1 指向的是第二個 字串的起始地址。while s 1 0...