Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过指针传递单个字符与通过指针传递字符串 传递字符串_C_String_Pointers_Character_Parameter Passing - Fatal编程技术网

C 通过指针传递单个字符与通过指针传递字符串 传递字符串

C 通过指针传递单个字符与通过指针传递字符串 传递字符串,c,string,pointers,character,parameter-passing,C,String,Pointers,Character,Parameter Passing,函数调用将是: char abc[10]; strcpy (abc,"ABC"); foo(abc); printf ("\nNew value of string is %s",abc); char c; c = 'x'; foo(&c); printf ("\nNew value of character is %c",c); 上述代码按预期工作。它可以工作,因为我通过指针传递字符串。如果我想让函数修改一个字符,你会怎么做 void foo(char &ch) { p

函数调用将是:

char abc[10];
strcpy (abc,"ABC");
foo(abc);
printf ("\nNew value of string is %s",abc);
char c;
c = 'x';
foo(&c);
printf ("\nNew value of character is %c",c);
上述代码按预期工作。它可以工作,因为我通过指针传递字符串。如果我想让函数修改一个字符,你会怎么做

void foo(char &ch)
{
  printf ("\nPassed argument is %c", ch);
  ch = 'A';
  printf ("\nChanged argument is %c", ch);
}
函数调用将是:

char abc[10];
strcpy (abc,"ABC");
foo(abc);
printf ("\nNew value of string is %s",abc);
char c;
c = 'x';
foo(&c);
printf ("\nNew value of character is %c",c);
这个代码不起作用。我相信这是一个简单的问题,但我找不到答案。如果我将函数原型更改为
voidfoo(char*ch)
,那么它应该是字符串而不是字符的地址


您可能会问,为什么我需要这样做,为什么我不能让函数返回字符!这是一个解决方案,但我也想知道扭曲的方式。

第二个foo函数不应该是

    void foo(char *ch)
{
  printf ("\nPassed argument is %c", ch);
  *ch = 'A';
  printf ("\nChanged argument is %c", ch);
}

第二个foo函数应该是

    void foo(char *ch)
{
  printf ("\nPassed argument is %c", ch);
  *ch = 'A';
  printf ("\nChanged argument is %c", ch);
}
<> >代码> Foo(char & ch:<)/c>只在C++中工作,至少在C中工作,直到C99中引用不是语言的一部分。 看看你的用法,我相信你想要

void foo(char *ch)
{
  *ch = 'A';
}
您可能会发现本教程有助于理解上述参数类型的原因以及它与字符串参数的区别。(第一个版本)

< P> >代码FUO(CHAR&CH) >仅在C++中工作,而不是C,至少在C99中引用不是语言的一部分。

看看你的用法,我相信你想要

void foo(char *ch)
{
  *ch = 'A';
}

您可能会发现本教程有助于理解上述参数类型的原因以及它与字符串参数的区别。(第一版)

您不应该忘记,在C中,字符串只是 以空终止符(0)结尾的字符数组。 所以,
char*
是指向字符的指针。 但是由于C语言中字符串的生成方式,它可以 还可以指向一个字符串

试试这个:

void foo(char *ch)
{
*ch='a';
}
用法与您的问题中类似。e、 g

char c;
c = 'x';
foo(&c);
printf ("\nNew value of character is %c",c);

您不应该忘记,在C中,字符串只是 以空终止符(0)结尾的字符数组。 所以,
char*
是指向字符的指针。 但是由于C语言中字符串的生成方式,它可以 还可以指向一个字符串

试试这个:

void foo(char *ch)
{
*ch='a';
}
用法与您的问题中类似。e、 g

char c;
c = 'x';
foo(&c);
printf ("\nNew value of character is %c",c);
  • C中没有“字符串”
  • char*
    定义指向
    char
    的类型
  • 具有
    char*p
    作为参数的函数是否可以预期
    p+1
    指向有效内存取决于作为参数传递给函数的内容。函数本身对此一无所知
  • C中没有“字符串”
  • char*
    定义指向
    char
    的类型
  • 具有
    char*p
    作为参数的函数是否可以预期
    p+1
    指向有效内存取决于作为参数传递给函数的内容。函数本身对此一无所知

  • 使用ApSpand和Cuth.<代码>当声明函数参数无效时,它是C++,用来标记参数作为引用而不是指针。要做到这一点,你当然不能传递指针。而且,当你有一个指针时,它是内存中某个位置的地址。如果它指向一个字符串或一个字符,取决于如何处理和使用指针。当使用函数“<代码> >代码>声明函数参数无效时,它是C++,用于将参数标记为引用而不是指针。要做到这一点,你当然不能传递指针。而且,当你有一个指针时,它是内存中某个位置的地址。如果它指向一个字符串或单个字符,这取决于您如何处理和使用指针。georgem已经发布了我错过的代码,请您尝试一下。。我也编辑了它georgem已经发布了我错过的代码你能试试吗。。我也编辑了它