怎么理解值传递和址传递? 完全蒙圈了,不要告诉我这是规定.
1
bazingaterry 2016-06-11 19:58:54 +08:00
就像小明要抄你的作业,值传递就是你给小明看,然后它按着抄了一份一模一样的;址传递就是你小明直接把你的拿去用了……
|
2
lizhenda 2016-06-11 19:59:48 +08:00
这有什么不好理解的呢?初学者吗,如果是的话还是先不去专牛角尖想,多写自然就会理解了。
|
3
congeec 2016-06-11 20:01:31 +08:00 1
既然提到了规定,你去看 specification 呀
C 语言只能传值。地址是啥?指针是啥?不就是一数字么,一个记录数据地址的数字。比如: void free(void *ptr); 这里面传过去的 ptr 就是一个 0x11223344 这样的值。 |
4
starcraft 2016-06-11 20:10:30 +08:00 via iPhone
看编译器的实现代码啊 配合 gdb 包治各种初学者疑难杂症。
|
5
gdtv 2016-06-11 20:21:53 +08:00 1
值传递就是把你的作业拿去复印一份,然后别人怎么用你的复印件对和无关对你无影响。
地址传递就是别人直接把你的作业拿走了,别人可以只看看然后还给你,也可以改了你的作业再还给你。 |
6
eamars 2016-06-11 20:27:12 +08:00
rule of thumb:
如果是函数的输入 parameter , int , float , char 这种自带类型,可以使用值传递和地址传递,对于 struct 这种,只能使用地址传递。这些都是效率决定的。 如果是函数的输出 parameter ,只能使用地址传递。 比如: typedef struct { int x; int y; int z; } Vector_t; void callback_function(int input_a, Vector_t *input_b, int *output_a, Vector_t *output_b) 这样的 |
7
acros 2016-06-11 20:36:32 +08:00
初学者还是要简单的方法去理解,说太底层了不太好吧。
举个例子,你要查字典里面一个字的解释。 值传递就是你把查到的内容重新抄写下来了。 址传递是把查到的页面位置记下来,需要时再去这个已经记住的地方找。 |
9
powergx 2016-06-11 21:03:46 +08:00 via iPhone
上网用域名访问 vs 背 ip
|
10
xuwenmang 2016-06-11 21:05:39 +08:00
你要学 C#可能混乱。
有 4 个概念 值类型、引用类型 值参数、引用参数 混合下各种效果有: 值类型的值传递、 值类型的引用传递 引用类型的值传递 引用类型的引用传递 当时看的时候瞬间蒙逼。不过 C#有本初级好书叫 C#图解,两三页,几个图片,看完瞬间开朗。 |
11
billlee 2016-06-11 23:44:41 +08:00
去看微机原理
|