-
我頭暈。 A 和 B 只是兩個指標。 如果不初始化它們,則它們不會指向任何記憶體空間。
這種指標稱為字段指標)。將它們分配給 value 已經是非法的。 即 *a=10, *b=20; 這句話是不合法的。
從頭到尾,沒有為a、b...分配記憶體。希望對你有所幫助。
-
指標交換函式引數是指標的指標。
整數交換也是如此。
只需要修改以下內容:
main()
int a,b;
a=10,b=20;
-
就我個人而言,我認為 *a=10, *b=20; 這句話有問題,不能用指標直接指向乙個值,你可以從m=10,n=20開始; *a=m,*b=n; 個人理解。 請批評和糾正。
如上所述,p 和 q 仍然是字段指標,除非在開頭給出 p 和 q,否則不會分配特定的空間為了使它成為 *p、*q=10 和 20,對吧? 指標不需要初始化,但在使用之前是否必須分配記憶體?
否則,它是乙個字段指標,可能指向系統記憶體? 隨意換手指不是很危險嗎? 個人理解,請指教樓下,謝謝。
也請專家提供更多建議。
-
如果沒有 *p=*q,兩個指標指向同乙個位址,並且 *q=t 是用 *q=t 完成的,*q 和 *p 將同時更改,*a=*b=10
樓上同學的指標不用初始化分配,*p=10正確,間接訪問操作可以讀寫。
-
這三個問題的統一答案。
通過輸入自己執行它。
基礎知識不再是基礎。
第乙個問題檢查邏輯運算子的優先順序。
第二個問題檢查輸入格式。
第三個問題考察程式設計思維。
-
對於 num[.]'e'-'a']+
e'-'a'實際上,它是與字母 E 相對應的 ACS
程式碼減去與字母 A 對應的 ACS
程式碼,即'e'-'a'相當於101-97=4;
所以 num[.]'e'-'a'] 和其他引線彎曲了 num[4] 和 num['e'-'a']+
相當於 num[4]++
因為 num[4] 是乙個變數,所以 num[4]++ 是乙個類似於 a++ 中的淮清的自強加表示式,即 num['e'-'a']+
是一種自我強加的表達方式。
-
1 .首先,我們定義乙個指標陣列,pt[3] 類似於陣列,陣列名稱代表第乙個字元,指標名稱代表第乙個指標,所以 pt 應該是 pt[0],pt[0] 對應 t[0]。
在 *(pt+l)+2) 中,我們看一下 pt+l 對於陣列,每行的記憶體是連續分配的,所以 pt+l 是當前 pt 行的下一行,即 t[1]。
*(pt+l)+2 是指向 Pt+1 的行中的第三個字元,即 t[1][2],因此 *(*pt+l)+2) 是指向 t[1][2] 的行中的第三個字元。
ps:for 迴圈中執行的含義是:pt[0] a,b,c
pt[1]→ e,f,g
pt[2]→ h ,i, j
pt 對應於 pt[0],所以 pt+1 = pt[1]。
2.在定義 sum 時,由於 sum 沒有初始化,編譯器會隨機分配 sum,所以 sum 會被賦值給乙個隨機數,和 之後的 sum 當然是不確定的。
第一次呼叫 fun 函式時,在輸入引數 (a+fun(d)) 時,fun(a+fun(d)) 應該會遇到 fun(d)。
在這種情況下,由於靜態 int d=5 尚未執行,因此傳入的引數 p(即 d)仍為 1,然後執行 d+=p;
在這種情況下,輸出 d 等於 6
之後,我們執行 fun(a+fun(d)) 進入外部 fun 函式,然後引數 p 等於 a+fun(d),即 9
此時,d 等於 6,所以 d+=p 等於 15,所以 15 是輸出
然後返回值是 d,所以它也是 15
所以最終結果是 6 15 15
ps.需要注意的是,靜態 int d=5 其中 d 被宣告為靜態變數,也就是說,在編譯時,變數 d 已經分配了記憶體,那麼當 fun() 函式被重複執行時,這個 d 變數就不會被重複定義,也就是當 fun 函式第二次執行時, 不需要執行靜態 int d =5。
-
在第乙個問題中,t 是乙個陣列,pt 是乙個指標陣列,迴圈後,指標陣列指向陣列 t。 也就是說,pt 和 t 應該是相同的內容,但 t 是 const。 *(pt+1) 是 t[1],*pt+l)+2) 是 t[1][2]。
對於第二個問題,sum 未初始化,因此答案為 C。 請記住,永遠不要使用未初始化的變數!
第三個問題,選擇c,key是靜態int d,位址分配好後,裡面的內容要等到程式執行結束才會發布,這就是變數生存期的問題。
最後,最好自己把這些問題輸入到編譯器中,然後用除錯功能觀察每個變數的變化,這樣會更容易理解。
-
哦,我很高興,我剛剛學完C語言。 我來看看 Ah A: int t[3][3], pt[3], k;
for (k=0;k<3;k++)pt[k]=&t[k][0];
我們來分析一下執行過程:
for (k=0;k<3;k++)pt[k]=&t[k][0];
第乙個迴圈:pt[0] = &t[0][0] 將第乙個位址分配給 pt; ,pt+l)+2) 等價於:t[l][2] “因為 *(pt+l) 等價於 t[l],所以它是 t[l]+2,加上 * 是 t[l][2]。
第二個迴圈的結果相同,,*pt+l)+2) 結果是 t[l][2])
二:main()。
sum 的值沒有初始化,所以它的值是不可預測的,用 sum 運算後的值也必須是不可預測的
同學們,還有什麼不明白的嗎?
-
*(pt+1)== t[1][0]; pt+1)+2) = t[1][2]
11.事實上,一般的編譯器答案將是 a,但 int sum; 沒有初始值,預設值是否為 0 取決於編譯器,因此不確定。
-
17 c * (pt+1) 指向 t 加 2。
11 C 問題是不確定的,因為初始值是隨機且不確定的。
-
11.之所以選擇 C,是因為沒有初始化,因此 sum 的值是不確定的。 19.選擇 C