函数参数的值传递和地址传递
2017-03-09 16:50
204 查看
利用一个小例子说明,见代码。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
/*void getmemory(char **p)
{
*p = (char *)malloc(100);
strcpy(*p, "helloworld");
//return p;
}
int main()
{
char* str = NULL;
getmemory(&str);
printf("%s", str);
free(str);
getchar();
return 0;
}*/
char* getmemory(char *p)
{
p = (char *)malloc(100);
strcpy(p, "helloworld");
return p;
}
int main()
{
char* str = NULL;
str = getmemory(str);
printf("%s", str);
free(str);
getchar();
return 0;
}
#include<stdio.h> void F1(int *pp) { pp++; *pp = 9; } void F2(int **pp) { (*pp)++; } //以上函数中,接收数据的参量都是pp,而不会是*pp或者**pp int* F3(int *pp) { pp++; return pp; } int main(void) { int *p; int a[2] = { 4,5 }; p = a; printf("1--------%d\n", *p);//开始值为4 F1(p); printf("2--------%d\n", *p);//4 //由于只是传值,在子函数F1的内部改变复制品的值,并不会改变原品p的值 //可以理解为用两个变量指向同一个地址,即形参pp和实参p指向同一个地址 //其中形参pp++,另外一个实参p并不会受影响 //但是可以修改指针所指的值,如F1代码中将a[1]的值改为9; printf("2`-------%d\n", a[1]);//9 F2(&p); printf("3--------%d\n", *p);//9 //传址,pp=&p(指针的地址,即pp是指向指针的指针),*pp=*(&p)=p; //如果要修改指针p,则应该传入指针p的地址(&p),此时进行*pp++操作,其实是对实参指针p进行操作 getchar(); getchar(); return 0; } //这个例子说明:如果要在子函数中修改主函数传过来的指针的指向,那么主函数应该向子函数传入指针的地址(而非指针本身); //此时在子函数中进行*操作后可以获得原来指针,而不是原来指针的复制品,之后可以根据需要修改指针。 //或者,将返回值类型改为指针类型,然后返回修改后的指针,给原来主函数的指针,如F3函数,此时在主函数中需要添加p=F3(p)代码。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
/*void getmemory(char **p)
{
*p = (char *)malloc(100);
strcpy(*p, "helloworld");
//return p;
}
int main()
{
char* str = NULL;
getmemory(&str);
printf("%s", str);
free(str);
getchar();
return 0;
}*/
char* getmemory(char *p)
{
p = (char *)malloc(100);
strcpy(p, "helloworld");
return p;
}
int main()
{
char* str = NULL;
str = getmemory(str);
printf("%s", str);
free(str);
getchar();
return 0;
}
相关文章推荐
- 使用通过寄存器传递的参数的地址, 作为支持调用其他函数
- 函数的参数传递的几种形式(值、地址、引用)及指针基础知识
- C++函数参数中的: 值传递,地址传递,双向传递
- 函数参数传递方式:传值和传地址的问题
- 17周---项目1-体会函数参数传递----传递变量的地址
- C++ 函数参数传递 值传递,引用传递,地址传递
- C++函数参数传递--值传递和地址传递
- 一道考察函数参数传递、值传递、指针传递(地址传递)、引用传递
- 交换函数的两种不同的实现方式------地址传递和引用参数
- 对象作为函数参数时调用拷贝构造函数、引用做函数参数时只是传递地址
- 一道考察函数参数传递、值传递、指针传递(地址传递)、引用传递
- 关于分析函数参数传递是值传递还是地址传递
- 第二周 项目一 C/C++语言中函数参数传递的三种方式(二):地址传递
- Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试
- 彻底搞定C指针-——第五篇:函数参数的传递(值传递、地址传递、引用传递)
- 【传地址值】第17周项目1--体会函数参数传递(输入三个整数将其按从大到小顺序输出)
- 函数参数为指针,在函数内没有必要改变指针地址,改了也不起作用,因为即便是指针,也是值传递指针!
- 第二周项目1 C/C++语言中函数参数传递的三种方式--传地址方式
- 函数参数传递、值传递、指针传递(地址传递)、引用传递
- 关于将函数的地址作为参数传递给另一个函数调用