3_18
void main()
{
char *p, *q;
p = (char *)malloc(sizeof(char) * 20);
q = p;
scanf(“%s %s”, p, q);
printf(“%s %s\n”, p, q);
}
若果输入的值为 def abc,输出结果为 def def
q=p
解释:
1、p指向了一段内存空间,q也指向了p所指的内存空间
2、赋值语句中,把一个对象的所有成员参数,向另一个对象赋值
区分:
char *p, **q;
p = (char *)malloc(sizeof(char) * 20);
//q指向p的地址,q保存了p的地址
q = &p;
q=&p;
在函数传参过程中,有值传递和地址传递。值传递时,在函数作用域中变量的值有效,一旦出了作用域变量的值无效;地址传递时,出了函数作用域变量的值依然有效
void foobar(int a, int *b, int **c)
{
int *p = &a;
*p = 101;
*c = b;
b = p;
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int *p = &c;
foobar(a, &b, &p);
printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p);
return (0);
}
result
a=1,出了foobar函数,a=101会消失;
b=2;b=p即b与p指向了同一空间 ; p保存了b的地址,*p取b里面的内容2;
c=3;无影响