Passing char pointer in C

后端 未结 5 889
时光说笑
时光说笑 2020-12-08 05:53

Okay so I am trying to pass a char pointer to another function. I can do this with an array of a char but cannot do with a char pointer. Problem is I don\'t know the size of

相关标签:
5条回答
  • 2020-12-08 06:21

    If you change the value of the pointer in a function, it will remain changed only in that one function call. Don't mess your head with pointers and try:

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

    The same with your pointer. You do not change the address it points to.

    If you assign to a variable passed by value, the variable outside the function will remain unchanged. You could pass it by a pointer (to pointer) and change it by dereferrencing it and it's the same with an int - in this case, it doesn't matter if the type is int or char * .

    0 讨论(0)
  • 2020-12-08 06:33
    void ptrch ( char * point) {
        point = "asd";
    }
    

    Your pointer is passed by value, and this code copies, then overwrites the copy. So the original pointer is untouched.

    P.S. Point to be noted that when you do point = "blah" you are creating a string literal, and any attempt to modify is Undefined behaviour, so it should really be const char *

    To Fix - pass a pointer to a pointer as @Hassan TM does, or return the pointer as below.

    const char *ptrch () {
        return "asd";
    }
    
    ...
    const char* point = ptrch();
    
    0 讨论(0)
  • 2020-12-08 06:36

    Here:

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

    You're passing point by value. Then, ptrch sets its own local copy of point to point to "asd", leaving the point in main untouched.

    A solution would be to pass a pointer to main's point:

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

    0 讨论(0)
  • 2020-12-08 06:37

    first declare funtion......like this

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

    next write main code.....

    void main()
    {
        void (*pnt)(char);  //  pointer function declaration....
        pnt=&function_call;  //    assign address of function
        (*pnt)('b');   //   call funtion....
    }
    
    0 讨论(0)
  • 2020-12-08 06:42

    This should work since pointer to the char pointer is passed. Therefore any changes to the pointer will be seen outside thereafter.

    void ptrch ( char ** point) {
        *point = "asd";
    }
    
    int main() {
        char * point;
        ptrch(&point);
        printf("%s\n", point);
        return 0;
    }
    
    0 讨论(0)
提交回复
热议问题