好的,所以我试图将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;
}
所以我试图理解我的问题的原因和可能的解决方案
答案 0 :(得分:13)
这应该有效,因为传递了指向char指针的指针。因此,之后会看到对指针的任何更改。
void ptrch ( char ** point) {
*point = "asd";
}
int main() {
char * point;
ptrch(&point);
printf("%s\n", point);
return 0;
}
答案 1 :(得分:6)
void ptrch ( char * point) {
point = "asd";
}
您的指针按值传递,此代码复制,然后覆盖副本。所以原始指针是不变的。
P.S。需要注意的是,当你执行point = "blah"
时,你正在创建一个字符串文字,而任何修改的尝试都是未定义的行为,所以它应该是 const char *
强>
要修复 - 按@Hassan TM传递指向的指针,或返回指针,如下所示。
const char *ptrch () {
return "asd";
}
...
const char* point = ptrch();
答案 2 :(得分:2)
下面:
int main() {
char * point;
ptrch(point);
您按值传递point
。然后,ptrch
设置自己的point
本地副本,指向"asd"
,point
main
保持不变。
解决方案是将指针传递给main
的{{1}}:
point
答案 3 :(得分:1)
如果更改函数中指针的值,它将仅在该一个函数调用中保持更改。 不要用指针弄乱你的脑袋并尝试:
void func(int i){
i=5;
}
int main(){
int i=0;
func(i);
printf("%d\n",i);
return 0;
}
与指针相同。您执行不更改其指向的地址。
如果分配给通过值传递的变量,则函数外部的变量将保持不变。 你可以通过一个指针(指向)来传递它,并通过dereferrencing它来改变它,它与int相同 - 在这种情况下,如果类型是int或char *则无关紧要。
答案 4 :(得分: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....
}