1樓:
1.陣列名str就是陣列str的首地址
p一開始存放的是指向str首地址的指標
while(*p!=』\0』)p++; p自增直到str結束,因為字串為"abcde"5位
所以p++執行5次,即 p=p+5=str+5;
而str等於str陣列的首地址.所以p-str=5.
2.函式char *strchr(char *str,char ch) 返回值為:指向陣列str中與ch相等位置的指標.
pt=strchr(line,ch)返回值就是字元b在str中的位置
line是line的首地址
所以pt-line=9,因為空格也算一個字元,你算下就知道了
3.void sub1(char a,char*b)
//函式sub1(char a,char *b)中,因為char a定義的a只是一個區域性變數,區域性變數只在定義他的地方有效,在這裡就是在sub1函式中有效,離開了sub1,a效果就消失了,它作用不到main裡面的a;而指標變數就不同了,它利用的是地址,象sub1中的b是一個地址,在函式sub1中是直接對變數b所在記憶體值進行更改,所以更改可以傳回到main()
void sub2(char *a,char*b)
//這裡跟上面一個道理,我就不復述了
void main()
2樓:匿名使用者
1.因為str裡存放的是陣列的首地址,是一個固定的值
2.strchr(line,ch)的作用是查詢字串中ch的位置並返回
同樣line裡面存放的是字串的首地址即「t」(line)的地址,而pt存放的是「b」的地址即line的地址,結果是8 b 吧?
3.首先,要區分傳值和傳址的區別,其中sub1中a是傳值,*b是傳址,所以 main() 中 sub1(a,&b);a的值沒有改變,而b的值變成了a,
第二個都是傳址,所以進行了交換。
如果地址的概念清楚的話,應該很容易懂。
拿3來說,sub1(a,&b) 執行時把a='a'的值傳給形參a,把b的地址傳給形參b,假設a的地址0x0001,b的地址0x0003,那麼一個是把0x0001所指向的值傳給了函式形參a,而另一個是把0x0003也就是b的地址&b傳給了函式形參b,那麼在函式中進行操作時,一個改變的是a的值,但並沒改變0x0001所指向的資料,而另一個是改變了0x0003指向的資料。
3樓:匿名使用者
同意1樓 3樓的 我想那個應該是全形引號吧 而不是空格
至於2樓 b會是在line[9]?
c語言程式疑惑(找高手幫忙解釋程式)
大頭 1.為什麼要在定義陣列後就直接輸出printf array a n 這個有什麼意義 答 意義就是提示下面輸出的資料是陣列 a 的資料 迴圈執行printf 5d a i j 將陣列 a 的全部內容輸出。2.程式中有兩處for語句巢狀迴圈,為什麼會有兩次?還有就是第一處的for語句巢狀迴圈得出的...
C中的簡單程式,請幫忙解釋一下,謝謝
for int i 0 i name.length 1 i 這裡有問題,應該寫 i name.length 1 或i name.length for int i 0 i name.length 1 i 這個處理了n 1個元素,n指陣列長度 最後一個元素如果也放在for迴圈裡處理的話,最後面會多一個 ...
誰能幫忙解釋一下這個電路,誰能幫忙解釋一下這個電路的工作原理
面對這樣的電路,老貓也會燒須!最要命的是那隻bc337,它的ce極直接接在電源的正負極上!如果它有機會導通,不就將電池短路了麼?如果它沒機會導通,那要它幹嗎?還有那兩隻50t10mh 20t的電感,在這種工作頻率不會太高的電路中,有何作用?暫且拋開以上不說,現說一下電路的情況 由於那隻22n電容的存...