我将一个字符串作为函数参数传递,我可以在该函数中访问该字符串吗

时间:2021-06-05 05:00:51

标签: c

在 C 中,如果我传递一个字符串作为函数参数,我将拥有指向该字符串基地址的指针变量。但是我们仍然可以打印作为参数传递的整个字符串。所以我想知道我是否可以访问该函数中的整个字符串,而不仅限于打印它?

void PrintHelloWorld(char *name){
    printf("Hello World %s \n",name);
}


int main(){
    char x[] = "John";
    PrintHelloWorld(x);

}

1 个答案:

答案 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] 才能有所作为)

相关问题