copy 函式技術推演

2022-03-19 11:07:38 字數 2143 閱讀 2338

/*

**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 像這組資料 我們可以...