首页 > 解决方案 > 我将字符串作为函数参数传递,我可以在该函数中访问该字符串吗

问题描述

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

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


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

}

标签: c

解决方案


当涉及到字符的内存分配细节时,字符串在 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]有所作为)


推荐阅读