void pointerTest(int num) {
num = 20;
}
int main() {
int num = 10;
pointerTest(num);
LOGI("%d", num) // 打印出来的结果是 10
return 0;
}
在这个例子中,main 函数定义了整型 num,值为 10,然后以参数传递给 pointerTest 函数,在 pointerTest 函数中,直接对传进来的 num 赋值为 20。最终,打印出来的结果还是 10。
为啥呢?熟悉 java 的人很快会反应过来,因为 int 是基本数据类型,要用引用数据类型。
public static void pointerTest(String str) {
str = "wk";
}
public static void main(String[] args) {
String str = "test";
pointerTest(str);
System.out.println(str); // 打印出来的结果是 test
}
String 是引用数据类型了吧,但是打印出来的结果仍没被改变
其实对于引用数据类型参数而言,只能对这个对象进行相应的操作(get/set),并不能直接替换整个对象
C/C++ 中得意于指针,能够修改函数外的变量值
void pointerTest(int *num) {
*num = 20;
}
int main() {
int num = 10;
pointerTest(&num);
LOGI("%d", num) // 打印出来的结果是 20
return 0;
}
字符串也是一样的:(C中的字符串类型为 char*)
void pointerTest(char **str) {
*str = "wk";
}
int main() {
char *str = "test";
pointerTest(&str);
LOGI("%s", str) // 打印出来的结果是 wk
return 0;
}
在 pointerTest 函数中,对传进来的指针进行取值(*)对外部参数进行修改。按照这个思路反推,那么我们在传递内存地址给函数 其实是 提供函数修改参数的能力文章来源:https://www.toymoban.com/news/detail-409243.html
所以,不管是二级指针还是三级指针,传递内存地址给函数的目的都可以这样子去理解文章来源地址https://www.toymoban.com/news/detail-409243.html
到了这里,关于C/C++ 指针传递的作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!