11

好的,所以我试图将 char 指针传递给另一个函数。我可以用一个 char 数组来做到这一点,但不能用一个 char 指针来做到这一点。问题是我不知道它的大小,所以我不能在main()函数中声明任何关于大小的东西。

#include <stdio.h>

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

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

但是,这不起作用,这两个起作用:

1)

#include <stdio.h>

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

2)

#include <stdio.h>
#include <string.h>

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

int main() {
    char point[10];
    ptrch(point);
    printf("%s\n", point);
    return 0;
}

所以我试图了解我的问题的原因和可能的解决方案

4

5 回答 5

21

这应该可以工作,因为传递了指向 char 指针的指针。因此,此后对指针的任何更改都将在外部看到。

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

int main() {
    char * point;
    ptrch(&point);
    printf("%s\n", point);
    return 0;
}
于 2013-01-15T05:02:06.010 回答
11
void ptrch ( char * point) {
    point = "asd";
}

您的指针按值传递,此代码复制,然后覆盖副本。所以原来的指针是不变的。

PS要注意的是,当你创建一个字符串文字时,任何修改point = "blah"的尝试都是未定义的行为,所以它应该是const char *

修复-像@Hassan TM 那样将指针传递给指针,或返回指针如下。

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

...
const char* point = ptrch();
于 2013-01-15T05:00:13.943 回答
3

这里:

int main() { char * point; ptrch(point);

你是point按价值传递的。然后,ptrch将它自己的本地副本设置point为指向"asd",而pointinmain保持不变。

一种解决方案是将指针传递给main's point

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

于 2013-01-15T05:01:16.597 回答
1

如果您在函数中更改指针的值,它将仅在该一次函数调用中保持更改。不要用指针弄乱你的头并尝试:

void func(int i){
  i=5;
}
int main(){
  int i=0;
  func(i);
  printf("%d\n",i);
  return 0;
}

与您的指针相同。您不会更改它指向的地址。

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

于 2013-01-15T05:02:07.273 回答
-1

首先声明函数......像这样

 #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....
}
于 2016-12-13T06:30:44.920 回答