在C中传递char指针

好的,所以我试图将char指针传递给另一个函数。 我可以使用char数组来完成此操作,但不能使用char指针。 问题是我不知道它的大小所以我不能声明main()函数中的大小。

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

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

1)

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

2)

 #include  #include  void ptrch ( char * point) { strcpy(point, "asd"); } int main() { char point[10]; ptrch(point); printf("%s\n", point); return 0; } 

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

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

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

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

修复 – 将指针传递给指针,如@Hassan TM所做,或返回如下指针

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

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

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

这里:

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

你是逐point传递的。 然后, ptrch设置它自己的point的本地副本point "asd" ,使main point不受影响。

一个解决方案是传递一个指向main point的指针:

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

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

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

你的指针也一样。 您不会更改它指向的地址。

如果分配给通过值传递的变量,则函数外部的变量将保持不变。 你可以通过指针( 指针 )传递它并通过dereferrencing它来改变它,它与int相同 – 在这种情况下,如果类型是int或char *则无关紧要。

首先声明function……像这样

  #include void function_call(char s) 

接下来写主代码…..

 void main() { void (*pnt)(char); // pointer function declaration.... pnt=&function_call; // assign address of function (*pnt)('b'); // call funtion.... }