在下面的示例中,我将char作为指针传递给函数.当函数打印出char的内存地址时,它是一个不同的地址.我在这种情况下处理两个不同的变量吗?是不是我在函数参数中没有使用指针的结果相同(与按值传递相同)?
char a = 'a';
printf("a=%p\n", &a);
showString(a);
//function
void showString(char *c){
c='b';
printf("c=%p\n", &c);
}
Run Code Online (Sandbox Code Playgroud)
c被赋值为'b'.但如果我a在函数调用后检查,它仍然具有值'a'.以上内容如何更改,以便函数中分配的值在函数外部进行?
您没有正确使用指针:不是为指针指向的对象分配新值,而是指定指针本身.
调用应使用address-of运算符,赋值应该与dereference运算符一起使用:
showString(&a);
printf("a=%p\n", (void*)&a);
...
void showString(char *c){
*c='b';
printf("c=%p\n", (void*)c);
}
Run Code Online (Sandbox Code Playgroud)
现在两个打印输出都会产生相同的地址,并且char a调用函数的值应该改变.
注1:编译器允许c = 'b'赋值的原因有点奇怪:'b'被认为是一个字符常量,char被认为是一个整数类型,而C允许您将整数赋给指针,假设您知道自己比编译器做得更好.
注意2:当您使用指针打印指针时%p,指针类型既不是也不void*是char*,void*则需要使用强制转换.你正在打印char*,所以它可以没有演员阵容,但无论如何我都添加了演员,以防你想用不同类型的指针试试这个.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |