使用一維字符陣列,您可以像這樣將它們作為字串文字傳遞
#include <stdio.h>
void go(char *a)
{
printf("%s", a);
}
int main()
{
go("Hello");
return 0;
}
但是我們可以用二維字符陣列來做到這一點嗎?也許像這樣的事情
void go (int rowSize, int colSize, char a[rowSize][colSize])
{
for (int i = 0; i < rowSize; i) {
printf("%s\n"), a[i]);
}
}
go(2, 16, {"Hello", "Hi"});
uj5u.com熱心網友回復:
您需要使用復合文字:
void go (size_t rowSize, size_t colSize, char a[rowSize][colSize])
{
for (size_t i = 0; i < rowSize; i)
{
printf("%s\n", a[i]);
}
}
int main(void)
{
go(2, 16, (char[][16]){"Hello", "Hi"});
return 0;
}
正如@Lundin 建議的那樣,您還可以使用指標陣列:
void go (size_t nstrings, char **strings)
{
for (size_t i = 0; i < nstrings; i) {
printf("%s\n", strings[i]);
}
}
int main()
{
go(2, (char *[]){"Hello", "Hi"});
return 0;
}
或更const正確的版本:
void go (int nstrings, char *const *strings)
{
for (int i = 0; i < nstrings; i) {
printf("%s\n", strings[i]);
}
}
int main()
{
go(2, (char *const[]){"Hello", "Hi"});
return 0;
}
對于大小、索引等,最好使用size_t或ssize_t。
uj5u.com熱心網友回復:
如果你想要一個指向只讀字串文字的陣列,它必須是一個字符指標陣列,char* array[] = {"Hello", "Hi"};. 這種型別與二維字符陣列完全不同,它們不兼容。
在這種情況下使用哪種形式取決于您想要做什么。這些應該是讀/寫字串還是只讀的?您是否打算調整單個字串的大小?等等。字串文字始終是只讀的,因此指向它們時要使用的正確指標型別是const char*. 但是,如果您僅將字串文字用于初始化讀/寫 2D 陣列,那么這無關緊要。
假設用例只是在函式中列印一堆字串文字而不是其他任何東西,那么最正確的形式是:
#include <stdio.h>
void go(size_t n, const char* a[n]) {
for (size_t i = 0; i < n; i) {
puts(a[i]);
}
}
int main() {
go(2, (const char*[]){"Hello", "Hi"});
}
這在功能上幾乎與 2D 陣列版本相同,但它可能不使用任何臨時記憶體來存盤字串,因此您可以節省一些 2x16 位元組等(這沒什么大不了的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/331434.html
