为什么将字符串作为参数打印出来?在 c
why does the string get printed out as an argument? in c
为什么字符串 "test"
作为参数打印出来?
我没有传递指向字符串的指针,因为我没有在参数之前分配它
字符串参数“test”是否存储在内存堆中的某处?
void printAstring(char * string){
printf("%s",string);
}
printAstring("test"); //Prints out test
通常如果我想将字符串作为参数传递给 pointer as char parameter
我分配 char 数组然后传递它
void printAstring(char * string){
printf("%s",string);
}
char printThis[5]="test";
printAstring(printThis); //Prints out test
字符串常量实际上是一个 char
数组,存储在内存的 read-only 部分。因此,当您将它传递给 printAsString
时,您传递的是存储字符串常量的数组的第一个元素的地址。
当你在双引号之间写任何东西时几乎无一例外,像这样:
"string literal"
您正在创建(您正在要求编译器创建)一个 read-only、char
的匿名数组,大小恰到好处,初始化为包含该字符串。然后由于您在需要其值的表达式中使用此匿名数组(在本例中,因此您可以将其传递给 printAsString
函数),编译器会自动生成一个指向数组第一个元素的指针,就像您尝试使用它的值时对任何数组所做的那样。
换句话说,当你写
printAstring("test");
你得到的和你写的差不多
const char __anonymous_array[] = "test";
printAstring(&__anonymous_array[0]);
虽然字符串(匿名数组)没有存储在堆上;它通常与程序的初始化数据一起存储,或者可能(因为它是只读的)与其代码一起存储。
为什么字符串 "test"
作为参数打印出来?
我没有传递指向字符串的指针,因为我没有在参数之前分配它
字符串参数“test”是否存储在内存堆中的某处?
void printAstring(char * string){
printf("%s",string);
}
printAstring("test"); //Prints out test
通常如果我想将字符串作为参数传递给 pointer as char parameter
我分配 char 数组然后传递它
void printAstring(char * string){
printf("%s",string);
}
char printThis[5]="test";
printAstring(printThis); //Prints out test
字符串常量实际上是一个 char
数组,存储在内存的 read-only 部分。因此,当您将它传递给 printAsString
时,您传递的是存储字符串常量的数组的第一个元素的地址。
当你在双引号之间写任何东西时几乎无一例外,像这样:
"string literal"
您正在创建(您正在要求编译器创建)一个 read-only、char
的匿名数组,大小恰到好处,初始化为包含该字符串。然后由于您在需要其值的表达式中使用此匿名数组(在本例中,因此您可以将其传递给 printAsString
函数),编译器会自动生成一个指向数组第一个元素的指针,就像您尝试使用它的值时对任何数组所做的那样。
换句话说,当你写
printAstring("test");
你得到的和你写的差不多
const char __anonymous_array[] = "test";
printAstring(&__anonymous_array[0]);
虽然字符串(匿名数组)没有存储在堆上;它通常与程序的初始化数据一起存储,或者可能(因为它是只读的)与其代码一起存储。