在C中传递字符指针

在C中传递字符指针,c,pointers,char,C,Pointers,Char,好的,我正在尝试将一个char指针传递给另一个函数。我可以用字符数组来实现这一点,但不能用字符指针。问题是我不知道它的大小,所以我不能在main()函数中声明任何关于大小的内容 #include <stdio.h> void ptrch ( char * point) { point = "asd"; } int main() { char * point; ptrch(point); printf("%s\n", point); retu

好的,我正在尝试将一个char指针传递给另一个函数。我可以用字符数组来实现这一点,但不能用字符指针。问题是我不知道它的大小,所以我不能在
main()
函数中声明任何关于大小的内容

#include <stdio.h>

void ptrch ( char * point) {
    point = "asd";
}

int main() {
    char * point;
    ptrch(point);
    printf("%s\n", point);
    return 0;
}
#包括
无效ptrch(字符*点){
point=“asd”;
}
int main(){
字符*点;
ptrch(点);
printf(“%s\n”,点);
返回0;
}
但这不起作用,但这两种方法起作用:

(一)

#包括
int main(){
字符*点;
point=“asd”;
printf(“%s\n”,点);
返回0;
}
(二)

#包括
#包括
无效ptrch(字符*点){
strcpy(点,“asd”);
}
int main(){
焦点[10];
ptrch(点);
printf(“%s\n”,点);
返回0;
}
因此,我试图了解我的问题的原因和可能的解决方案

void ptrch ( char * point) {
    point = "asd";
}
您的指针是通过值传递的,此代码将复制,然后覆盖副本。因此原始指针未被触动

需要注意的一点是,当您创建一个字符串文本时,任何试图修改的行为都是未定义的行为,因此它实际上应该是常量字符*

修复-像@Hassan TM那样将一个指针传递到一个指针,或者返回指针,如下所示

const char *ptrch () {
    return "asd";
}

...
const char* point = ptrch();
在这里:

intmain(){
字符*点;
ptrch(点);

您正在按值传递
。然后,
ptrch
将自己的
本地副本设置为指向
“asd”
,使
中的
点保持不变

解决方法是将指针传递到
main


void ptrch(char**pp){*pp=“asd”;return;}

由于指向char指针的指针已被传递,因此,指针的任何更改都将在此后的外部看到

void ptrch ( char ** point) {
    *point = "asd";
}

int main() {
    char * point;
    ptrch(&point);
    printf("%s\n", point);
    return 0;
}

如果在函数中更改指针的值,它将仅在该函数调用中保持更改状态。 不要让指针弄乱你的头脑,试着:

void func(int i){
  i=5;
}
int main(){
  int i=0;
  func(i);
  printf("%d\n",i);
  return 0;
}
指针也是如此。您不必更改指针指向的地址

如果指定给通过值传递的变量,则函数外部的变量将保持不变。
您可以通过一个指针(到指针)来传递它,并通过取消对它的引用来更改它,它与int是相同的-在这种情况下,类型是int还是char*

 #include<stdio.h>
 void function_call(char s)

我更愿意返回指针,而不是另一个间接级别,但+1不是唯一的原因。为什么它与integer一起工作,并且不需要将指针传递给指针?我认为,因为在取消引用后,char pointer reside是数组第一个元素的地址?哪种方式更便宜?@SarpKaya都非常快(如果有的话,差异将是最小的),但为了可读性,我更喜欢“返回指针”方法。如果不将返回值硬编码为字符串文字,这将触发局部变量警告。为什么我们在这里需要const?
void func(int i){
  i=5;
}
int main(){
  int i=0;
  func(i);
  printf("%d\n",i);
  return 0;
}
 #include<stdio.h>
 void function_call(char s)
void main()
{
    void (*pnt)(char);  //  pointer function declaration....
    pnt=&function_call;  //    assign address of function
    (*pnt)('b');   //   call funtion....
}