好了,所以我想一个字符指针传递给另一个函数。 我能做到这一点与字符数组,但不能用字符指针做。 问题是我不知道它的大小,所以我不能宣布对中大小事情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;
}
所以,我想明白其中的道理和我的问题可能的解决方案
void ptrch ( char * point) {
point = "asd";
}
你的指针是按值传递 ,而这种代码的副本,然后将覆盖副本 。 所以原来的指针不变。
PS点要注意的是,当你做point = "blah"
你正在创建一个字符串字面量,任何企图修改是不确定的行为 ,所以它确实应该const char *
修复 -一个指针传递给一个指针作为@Hassan TM确实,或返回如下的指针 。
const char *ptrch () {
return "asd";
}
...
const char* point = ptrch();
这应该工作,因为指向字符指针传递。 因此,将指针的任何变化将在其后外侧看到。
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
指向"asd"
,留下point
在main
不变。
的溶液。将指针传递给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或字符不要紧*。
首先声明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....
}