/***str_copy.c
***/
#include
void copy_str21(char *from, char *to)
*to = '\0'
;
return;}
intmain()
程式記憶體四區分析:
char *from = "abcd"; 作業系統在在常量區分配乙個記憶體存放」abcd」,在棧區定義分配一塊記憶體,取名位from,from指向的這塊記憶體儲存「abcd」的首位址。
char buf2[100]; 作業系統在棧區分配一塊記憶體,開頭與棧區增長方向相反,大小為100個位元組
copy_str21(from,buf2); 程式進入到該函式中
void copy_str21(char *from, char *to) 作業系統在繼續在棧中分配兩塊記憶體,分別用to和from指向這兩塊記憶體。並且把mian函式中的from,to位址首部存放在該函式中分配到from,to指標指向的記憶體
for(; *from != '\0'; from++,to++)
*to = *from;
copy_str21函式中from指標儲存的位址是常量「abcd」的首位址,to指標儲存的是mian函式中buf2陣列的首位址。然後把from指標不斷後移區內容賦值給to指標不斷後移所指向的記憶體空間。
*to = '\0'; 由於buf2沒有進行初始化,所以最後要在結束的時候把最後面的記憶體賦值0,作為c語言字串的結尾。
然後程式返回,copy_str21棧位址**,主函式列印buf2字元陣列。
copy函式技術演練
/***str_copy.c
***/
#include
void copy_str21(char *from, char *to)
*to = '\0'
;
return;}
void copy_str22(char *from,char *to)
*to = '\0'
;
return;}
void copy_str23(char *from,char *to)
}void copy_str24(char *from,char *to)
}void copy_str25(char *from,char *to)
intmain()
執行結果:
exbot@ubuntu:~/sharewin/candc++/20190924$ gcc strcopy.c -o strcopy -g
exbot@ubuntu:~/sharewin/candc++/20190924$ ./strcopy
buf1:abcd
buf2:abcd
buf3:abcd
buf4:abcd
buf5:abcd
/***copy_str.c
***/
#include
int copy_str26_good(char *from,char *to)
while(*to++ = *from++);
return;}
int copy_str27_verygood(char *from,char *to)
char *tempfrom = from
;
char *tempto =to;
while(*tempto++ = *tempfrom++);
return;}
intmain()
else
//不要輕易改變形參的值,要引入乙個輔助的變數指標,把形參接過來
ret = copy_str27_verygood(from
,buf1);
if(-1 ==ret)
else
return0;
}
執行結果:
exbot@ubuntu:~/sharewin/candc++/20190924$ ./copy_str
copy success buf = abcd
copy success buf1 = abcd
陣列做函式推演
include stdlib.h include string.h include stdio.h int a 10 int a int a 陣列做函式形參的時候,如果在形參中定義int a 10 語句,c c 編譯器 會做優化,技術推演如下 int a 10 int a int a 總結 函式呼叫...
copy建構函式
防止傳值方式傳遞 我們也許會說 如果我自己不寫拷貝建構函式,編譯器將為我建立。所以,我怎麼能保證乙個物件永遠不會被通過傳值方式傳遞呢?有乙個簡單的技術防止通過傳值方式傳遞 宣告乙個私有 p r i v a t e 拷貝建構函式。我們甚至不必去定義它,除非我們的成員函式或友元 f r i e n d ...
C語言 陣列做函式引數退化為指標的技術推演
陣列做函式引數退化為指標的技術推演 include include include 一維陣列做函式引數退化為指標的技術推演 void printfa char strarr 3 計算機中,陣列都是線性儲存,二維陣列元素也是乙個個的排列的 例如 1,2,3,4,5,6,7,8,9 像這組資料 我們可以...