1. char指針作為函數參數
在C語言中,表示字符串的方式有3種:
- char數組
- 用引號括起的字符串常量
- char指針
這3種形式都可以將其作為實參傳遞給函數中的參數(char*),因此函數的形參需要使用char*類型。將字符串作為參數來傳遞,實際上傳遞的是字符串第一個字符的地址。
需要注意的是,字符串與普通char數組的區別,字符串有內置的結束字符(空置字符,‘\0’),普通的char數組包含字符,但不是以空值字符結尾的,所以它不是字符串。所以C風格的字符串傳遞給函數參數時,可以不將字符串長度的參數傳遞給函數。函數內部可以通過循環計算出字符串的長度。
字符串作為函數參數的一個實例:
#include <iostream>
#include <cstring>using namespace std;int c_in_str(const char* str, char ch)
{int count = 0;while (*str){if (*str==ch){count++;}str++;}return count;
}int main()
{char array_c[15] = "ubuahsdduash";const char *pt_c = "shadhasshdasdh";int u_num = c_in_str(array_c,'u');int s_num = c_in_str(pt_c, 's');cout << "u number in " << array_c<< " is: " << u_num << endl;cout << "s number in "<< pt_c<<" is: " << s_num << endl;return 0;
}
程序輸出如下:
程序說明:
- c_in_str函數中的字符串參數在函數中不應該被修改,因此字符串參數需要設置為const。
- c_in_str函數中演示了字符串處理的標準格式:
while(*str)
{statement;str++;
}
開始,str指向字符串的第一個字符,因此*str表示的是第一個字符。循環語句中,只要*str不為空值字符(‘\0’?),*str就為非零值,循環將繼續。在每輪循環結尾處,表達式str++將增加一個字節,使得char指針指向字符串中的下一個字符。最終str*將指向字符串結尾的空值字符,使得*str等于0(空值字符的數字編碼為0),從而結束循環。
2. string對象作為函數參數
C風格字符串和string對象用途幾乎相同,但與數組相比,string對象與結構更相似。例如:可以將一個結構賦給另一個結構,也可以將一個對象賦給另一個對象。如果需要多個字符串,可以聲明一個string對象數組。