題目
現有一個字符串"eeddccbbaa",要求寫一個函數(接口),實現字符串的反轉。java
代碼#include<stdio.h> #include<stdlib.h> #include<string.h> char* recv_str(char *from,int len) { // 判斷字符串是否存在 if (from==NULL) { printf("from字符串不存在\n"); return NULL; } // 使得p 指向字符串的尾部 char *p = from + len -1; // 爲了使 len 的值一直保存的是字符串的長度 int l = len; char *to = (char*)malloc(100); // 轉化成的目的字符串 if (to==NULL) { printf("to字符串malloc失敗!\n"); return NULL; } // 根據字符串的長度,讓字符串 from 最後一個字符換到字符串 to 的第一個字符以此類推 for (;l>0;p--,to++,l--) { *to = *p; } // 使字符串的最後一個字符是‘\0’ *to = '\0'; // 使得 to 指針重新指向字符串的開頭 to = to - len; return to; } int main() { char from[100] = "eeddccbbaa"; int len = strlen(from); // 求出字符串長度 char *to = recv_str(from, len); printf("%s", to); // 打印出字符串 return 0; }解析
在參考代碼中咱們能夠看到 rev_str 函數和 main 函數,在 main 函數中調用了 rev_str 函數,那麼咱們就說 main 函數是調用者,rev_str 函數是被調用
者。ide
指針的輸入輸出是站在被調用者的角度上的,也就是站在此題答案中rev_str 函數的角度上。
rev_str 函數有兩個參數 from,len,調用者 main函數在棧區給字符串「eeddccbbaa「分配了空間,經過指針 form 使得被調用者 rev_str 函數獲得字符串」eeddccbbaa」的地址,像這種調用者分配空間讓被調用者使用的指針參數咱們稱之爲輸入參數。而被調用者 rev_str 函數分配了空間經過指針 to 傳回給調用者 main 函數,咱們稱之爲指針的輸出。函數