C/Golang中的值传递和指针传递
2016-09-23 17:18
330 查看
-------------------------golang---------------------------------------------- package main import "fmt" func A(m int, n []int) { m = 100 n[0] = 99 fmt.Printf("After : &m=%p,&n=%p,n=%p\n", &m, &n, n) fmt.Printf(" m=%d,n=%v\n", m, n) } func main() { m := 300 n := []int{1, 2, 3} fmt.Printf("-----------origin--------------------\n") fmt.Printf("Befter : &m=%p,&n=%p,n=%p\n", &m, &n, n) fmt.Printf(" m=%d,n=%v\n", m, n) fmt.Printf("-----------call A--------------------\n") A(m, n) fmt.Printf("------------end-------------------\n") fmt.Printf("End : &m=%p,&n=%p,n=%p\n", &m, &n, n) fmt.Printf(" m=%d,n=%v\n", m, n) }
运行结果:
Before : &m=0x7ffcf9f5de48,&n=0x7ffcf9f5de40,n=0xcf1010 Call A: &m =0x7ffcf9f5de2c,&n=0x7ffcf9f5de20,n =0xcf1010 After : &m=0x7ffcf9f5de48,&n=0x7ffcf9f5de40,n=0xcf1010
结论:
1.调用A函数是把n的值(并非是n指向的内容,而是指针的值)在函数内开辟空间复制下来。 2.A函数中的n和main中的存储n的内存地址是不一样的,但是都是存储了n的值(n是指针)。 3.A函数任何传递非指针、非引用的参数,都会在A函数的函数栈内开辟空间复制这个值,如果是数组,都会复制该数组在该函数,一旦退出该函数,针对A函数对m的操作都会实现,因为A函数内的m是对A函数参数m的复制,并非原始数据。
--------------------------------C------------------------------------ /************************************************************************* > File Name: test.c > Author: perrynzhou > Mail: 715169549@qq.com > Created Time: Sat 24 Sep 2016 02:21:00 AM HKT ************************************************************************/ #include <stdio.h> #include <stdlib.h> void A(int m,int *n) { m =100; n[0]=300; fprintf(stdout,"Call A: &m =%p,&n=%p,n =%p\n",&m,&n,n); } int main(void) { int m = 30; int size = 3,i; int *n = (int *)malloc(sizeof(int)*size); n[0] = 99; n[1] = 6; n[2] = 88; fprintf(stdout,"Before : &m=%p,&n=%p,n=%p\n",&m,&n,n); A(m,n); fprintf(stdout,"After : &m=%p,&n=%p,n=%p\n",&m,&n,n); if(n != NULL){ free(n); n=NULL; } return 0; }
运行结果:
$ ./a.out Before : &m=0x7ffe1e7f3058,&n=0x7ffe1e7f3050,n=0x6a3010 Call A: &m =0x7ffe1e7f303c,&n=0x7ffe1e7f3030,n =0x6a3010 After : &m=0x7ffe1e7f3058,&n=0x7ffe1e7f3050,n=0x6a3010
最终结论:
***和Golang中是一致的哦!!结论和golang中是一致的哦!!!*** 1.调用A函数是把n的值(并非是n指向的内容,而是指针的值)在函数内开辟空间复制下来。 2.A函数中的n和main中的存储n的内存地址是不一样的,但是都是存储了n的值(n是指针)。 3.A函数任何传递非指针、非引用的参数,都会在A函数的函数栈内开辟空间复制这个值,如果是数组,都会复制该数组在该函数,一旦退出该函数,针对A函数对m的操作都会实现,因为A函数内的m是对A函数参数m的复制,并非原始数据。
相关文章推荐
- golang传递接口类型参数时,什么时候用指针
- 指针传递内存的做法
- Post/Send Event传递指针的危险性分析(转自CSDN MAOXIAODONG)
- 传递变量名,传递指针,传递引用
- 指针传递内存深入探讨(一)
- C语言一级指针、二级指针、数组作为参数传递需要注意的若干问题
- 函数参数的传递问题(指针的指针)
- 函数参数的传递问题(一级指针和二级指针)
- C++入门篇之值传递,指针传递和引用传递的那些事
- 指针转换 和 指针在函数迭代中的传递
- C++引用与指针/值传递的比较
- c++值传递和引用及指针传递区别
- 值传递,指针传递,引用传递 的区别
- 向普通函数传递类成员函数指针的问题
- 向函数中传递指针和传递指针的引用的区别
- C++中引用传递与指针传递区别
- c/c++中指针参数如何传递内存
- 指针传递参数_for chris
- c++中函数参数传递(值传递、指针传递,引用传递)进一步认识
- c#调用C++写的DLL,传递二维指针参数