在 C 中,如果我传递一个字符串作为函数参数,我将拥有指向该字符串基地址的指针变量。但是我们仍然可以打印作为参数传递的整个字符串。所以我想知道我是否可以访问该函数中的整个字符串,而不仅限于打印它?
void PrintHelloWorld(char *name){
printf("Hello World %s \n",name);
}
int main(){
char x[] = "John";
PrintHelloWorld(x);
}
答案 0 :(得分:0)
String 在 C 中不够精确。字符串字面量可以通过两种方式赋值:
char a[] = "ABCDE";
char *p = "ZYXWV";
a
是一个“普通”字符数组。好像是通过首先声明 char a[6];
创建的,终止符 0 是由编译器添加的。
p
是一种特殊情况,因为 5 个字符加上 0 的数组必须存储在某处,但没有数组变量。
差异并不重要,但例如gcc 决定将这些非对象数组放入 .rodata
部分:
String dump of section '.rodata':
[ 4] ZYXWV
String dump of section '.data':
[ 8] @
[ 10] ABCDE
[ 19]
所以
const char *p = "ZYXWV";
是定义只读字符串的更安全、更清晰的方法。
函数声明 (char *name)
可以反映:
(const char *name)
声明不会发生任何修改。
(char name[12])
以显示人们期望分配 name
。 (编译器需要 [static 12]
才能有所作为)