1樓:enjoy冰心玉壺
在主函式main中定義了兩個字元陣列a1和a2,都是字串常量初始化方式,記憶體分配時會在字串尾部儲存乙個空字元'\0'。然後呼叫自定義函式insert,先求兩個字串的長度(不包含結尾的'\0'),所以n1等於5,n2等於3。
然後看第乙個for迴圈,i的初值為4,j的初值為7。迴圈條件是i>2,第一次s1[7]=s1[4],賦值語句,把s1[4]的字元『e』賦值給s1[7]。第二次s1[6]=s1[3],把s1[3]的字元『d』賦值給s1[6],然後下一次不再滿足迴圈條件,退出迴圈。
第二個for迴圈,i的初值為2。迴圈條件是*s2!='\0'。
指標變數s2指向a2,也就是字元陣列a2中的字元不為'\0'。第一次s1[2]=*s2,把a2的第乙個字元'a'賦值給s1[2]。第二次s1[3]=*s2,把a2的第二個字元'b'賦值給s1[3]。
第三次s1[4]=*s2,把a2的第三個字元'c'賦值給s1[4]。然後下一次不再滿足迴圈條件,退出迴圈。
所以最後s1[6]等於'd',s1仍然指向字串a1,不過變為'ababc',在上面所說的第二個for迴圈中重新複製了。當然a1也變為'ababc'。因為printf("%s\n",s1)遇到第乙個'\0'就會結束,所以輸出的結果都是'ababc'。
看一下指標的知識就能理解這個程式了。基本就是這個過程吧。
2樓:布克斯逸
這樣就對了:
#include
#include
void insert(char *s1,char *s2,int f)
for(i=f-1;*s2!='\0';i++,s2++)s1[n1+n2]='\0';
n1= strlen(s1);
printf("%d,%d,%c\n",n1,n2,s1[6]);
printf("%c\n",s1[6]);
printf("%s\n",s1);
}int main()
,a2="abc";
int f=3;
insert(a1,a2,f);
printf("%s",a1);
return 0;}
c語言輸出結果是一串很奇怪的數字
3樓:小帆向前衝
這些奇怪的數字是位址,因為按你這個程式走,應該是順序輸出b[4],b[3],b[2],b[1],b[0],但是b[4]和b[3]在你輸入567的時候是沒有存入數的,所以輸出不對
這樣就好了:
#include
int main()
printf("%d\n",i+1);
s=i;
for(;s>=0;s--)
printf("%d",b[s]);
printf("\n");
return 0;}
4樓:
是你的陣列後面的元素沒有賦值,輸出的不確定的值。這個題不必要陣列來實現.
你不是想輸入乙個數然後輸出他是幾位數?還有這幾位數是什麼麼?
直接在每次迴圈的過程中將這些數字輸出即可,再者你每次輸入的資料的位數不同,必定會浪費記憶體
5樓:唔知吳魏
b[4]和b[3]沒有賦初始值,所以是隨機值,應該是定義陣列b時初始化,int b[5]=;
6樓:hwllo泠泉石上
樓主這個程式你要幹嘛。。。
7樓:匿名使用者
你給b[5]賦初值為0
c語言,以下程式的輸出結果是,C語言問題 以下程式的輸出結果是?
輸出1 3 這是遞迴了,所以先是fun 3 進入後發現3 2 1,所以又繼續func 3 2 也就是fun 1 進入發現1 2 0,就執行prinft,輸出1,然後fun 1 就返回了 返回出去正好是fun 3 的prinft,輸出3 進入fun 3 進入fun 1 輸出1退出fun 1 輸出3退出...
c語言中float輸出的結果從左往右有效數字是6位,但是我編寫這個小程式後怎麼就只有3位有效?望高手解答
想要搞清楚這個問題,你需要了解float型別在記憶體中的儲存結構 符號位 指數 尾數 78.88在記憶體中的結構為 01000010 10011101 11000010 10001111 第一位為符號位,0 後面八位為指數位10000101 最後23位為尾數0011101 11000010 1000...
C語言初級有以下程式段輸出結果是
for i 1 i 15 j 4 一定是給錯了,應該是for i 1 i 15 i 4 取4個值1,5,9,13 for j 3 j 19 j 4 m 會執行5次m 也就是m 5,j分別取3,7,11,15,19 兩個迴圈是巢狀關係,合計執行為4 5 20。 外層迴圈應該是 for i 1 i 15...