c语言的参数传递永远都是值传递。
int i=1;
void a(int x){
x=5;
}
a(i);
i的值不会改变,只是将5传递给x。
同理。
void a(char *p){
p=(char *)malloc(100);
strcpy(p,"helloworld");
}
char *x=NULL;
a(x);
printf(x);
同样是不会输出"helloworld"。
原因是a(x)是把指针x的值传递给了p。p的值是0。也就是把0这个地址传递给p。
然后p=(char *)malloc(100); p这货有给自己搞了一个新的地址值。
那该怎么改才能达到预期的效果呢。。。。要想修改一个数。就要得到这个数的地址。。。地址。。x的地址是啥捏。。。。当然是&x。
先捋清楚关于指针的概念
int *p; p的值是一个地址,这个地址是一个整形变量的地址。传递类型是 (int *)或 &(整形变量)。
int ** p; p的值是一个地址,这个地址是一个指针的地址。。。。这个指针的值是一个整形变量的地址。传递类型。(int **)或 &(int *变量)。
下面谈谈 char *p这货。这货是怎么和字符串扯上关系的捏。。。
C语言里有这个头文件,C语言里压根就没有string这个类型,所以字符串都是通过char数组来存储的,而这个头文件里声明的函数原型也全是针对char数组的种种操作。直到C++中才出现了string这个类(注意是