我是菜鳥,我想將字串陣列的指標傳遞給一個函式,該函式只是使用指標演算法列印陣列的字串。
#include <stdio.h>
#include <string.h>
char words[][10] = { "madam", "Russia", "India", "Japan", "China", "Brazil", "Mexico" };
int size = sizeof(words) / sizeof(words[0]);
void printer(char *, int);
int main() {
printer(*words, size);
return 0;
}
void printer(char *array, int len) {
for (int i = 0; i < len; i ) {
printf("%s\n", (array i));
}
}
輸出:
madam
adam
dam
am
m
它不是一一列印元素(字串)。
uj5u.com熱心網友回復:
按照編碼,printer接受一個字串并列印每個最終子字串。您通過*words,這與 相同words[0],即:二維陣列中的第一個字串。
要傳遞指向陣列的指標,引數的型別應該是char array[][10](*)。:
#include <stdio.h>
char words[][10] = { "madam", "Russia", "India", "Japan",
"China", "Brazil", "Mexico" };
int size = sizeof(words) / sizeof(words[0]);
void printer(char words[][10], int len);
int main() {
printer(words, size);
return 0;
}
void printer(char words[][10], int len) {
for (int i = 0; i < len; i ) {
printf("%s\n", array[i]));
}
}
但是請注意,您也可以將其定義array為指向字串的指標陣列char *array[]。這將允許任何長度的字串,不限于 9 個字符加上一個空終止符。
代碼將更改為:
#include <stdio.h>
char *words[] = { "madam", "Russia", "India", "Japan",
"China", "Brazil", "Mexico" };
int size = sizeof(words) / sizeof(words[0]);
void printer(char *words[], int len);
int main() {
printer(words, size);
return 0;
}
void printer(char *words[], int len) {
for (int i = 0; i < len; i ) {
printf("%s\n", array[i]));
}
}
該陣列words是從字串文字初始化的,不能更改,因此最好將其定義為const char *array[]并進行相應修改printer。另請注意,這printf("%s\n", array[i]))等效于puts(array[i])(好的編譯器會檢測到這種等效性并在兩種情況下都生成對的呼叫puts):
#include <stdio.h>
const char *words[] = { "madam", "Russia", "India", "Japan",
"China", "Brazil", "Mexico" };
int size = sizeof(words) / sizeof(words[0]);
void printer(const char *words[], int len);
int main() {
printer(words, size);
return 0;
}
void printer(const char *words[], int len) {
for (int i = 0; i < len; i ) {
puts(array[i]);
}
}
(*) 該函式不接收實際的 2D 陣列作為引數,而是一個指向陣列陣列的指標,該陣列在技術上具有型別char (*)[10],但編譯器將等效地接受這兩種語法,并且char array[][10]更簡單且更具可讀性
uj5u.com熱心網友回復:
您只是在列印 的第一個元素words[0],因為您已經通過words[0]了相當于*words.
此外,要列印整個指標陣列,您需要char [][10]在 function 中作為引數printer()。
注意:你可以把printer()函式放在函式之上main(),那么就不需要前向宣告了。
最終代碼
#include <stdio.h>
char words[][10] = {"madam", "Russia", "India", "Japan", "China", "Brazil", "Mexico"};
int size = sizeof(words) / sizeof(*words);
void printer(const char array[][10], int len){
for(int i = 0; i < len; i ){
puts(array[i]);
}
}
int main(void) {
printer(words, size);
return 0;
}
uj5u.com熱心網友回復:
char *array到char (*array)[10]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/464187.html
下一篇:通過兩通匯編器之一
