在C中传递字符指针
好的,我正在尝试将一个char指针传递给另一个函数。我可以用字符数组来实现这一点,但不能用字符指针。问题是我不知道它的大小,所以我不能在在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
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....
}