通过字符指针用C(Passing char pointer in C)

2019-07-18 05:01发布

好了,所以我想一个字符指针传递给另一个函数。 我能做到这一点与字符数组,但不能用字符指针做。 问题是我不知道它的大小,所以我不能宣布对中大小事情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;
}

所以,我想明白其中的道理和我的问题可能的解决方案

Answer 1:

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

你的指针是按值传递 ,而这种代码的副本,然后将覆盖副本 。 所以原来的指针不变。

PS点要注意的是,当你做point = "blah"你正在创建一个字符串字面量,任何企图修改不确定的行为 ,所以它确实应该const char *

修复 -一个指针传递给一个指针作为@Hassan TM确实,或返回如下的指针

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

...
const char* point = ptrch();


Answer 2:

这应该工作,因为指向字符指针传递。 因此,将指针的任何变化将在其后外侧看到。

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

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


Answer 3:

这里:

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

你传递point的值。 然后, ptrch将自己的本地副本point指向"asd" ,留下pointmain不变。

的溶液。将指针传递给mainpoint

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



Answer 4:

如果你在一个函数改变指针的值,它只能保持在一个函数调用改变。 不要惹你的头指针和尝试:

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

与你的指针一样。 你改变它指向的地址。

如果您分配给按值传递一个变量,函数外的变量将保持不变。 你可以通过指针( 以指针 )传递,并通过dereferrencing它改变它,它与一个int一样的-在这种情况下,如果类型为int或字符不要紧*。



Answer 5:

首先声明funtion ......像这样

 #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....
}


文章来源: Passing char pointer in C
标签: c pointers char