V2EX tyzual 的所有回复 第 1 页 / 共 1 页
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX    tyzual    全部回复第 1 页 / 共 1 页
回复总数  5
2017-04-11 16:38:01 +08:00
回复了 drlalll 创建的主题 C C 语言 数组 指针 函数 问题
这段代码槽点略多。不知道怎么吐槽了。。。
2017-04-11 16:22:40 +08:00
回复了 soratadori 创建的主题 C++ 这段 c++代码啥意思?
*(unsigned int*)sample = *((unsigned int*)Buffer+i);

楼主主要是看不懂这句话吧。
按照楼主的说明 Buffer 应该是一个类似于
byte *Buffer 或者 byte Buffer[随便一个什么数字] 的东西。
等号右边先把 Buffer(强行)转成一个 unsigned int *这样的话,后面 + i 就会按照无符号整型来计算偏移量,也就是+i 会向后移动 i * sizeof(unsigned int) 个地址。(否则会向后移动 i * sizeof(byte))。
计算完成偏移量以后,再对这个地址解引用(取值),因为这个时候,地址的类型是 unsigned int *所以此时编译器会把当前地址储存的数据当成一个无符号整形来对待, unsigned int 站四个 byte ,所以编译器会从计算完成的偏移量开始向后读取四个 byte 的内容作为要赋的值。即等号右边的值。

等号左边先把 sample 强行转成了一个 unsigned int *然后在解引用(取值)。因此,解引用完成的时候,等号左边的类型是一个 unsigned int (虽然实际上不是)。因此编译器会把等号右边的值写入到 sample 起始地址到 sample 地址后四个 byte 中。
而 sample 的实际类型是 byte[4],长度正好也是四个 byte 。所以 sample[0] 的值正好就是赋值号右边那个值的最低位 byte 的值, sample[1]是第二低位 byte 的值。以此类推。
2016-12-30 20:17:21 +08:00
回复了 kopp123 创建的主题 Go 编程语言 一段 golang 代码不太懂就 golang 大牛解读
当 go routine 启动第一次执行时 range 已经跑了很多圈而起 go func 对 range 中的循环变量是引用捕获。
这句话可以这样理解


如果 f:=file go func 中对 f 就是值捕获。
go 中只有按引用捕获,所以如果在 go func 中引用 f 还是按引用捕获,只不过捕获的是 f 的引用。 go func 中的值会随着 f 变化而变化。
如果在 go func 中不想让捕获的值随着外部修改而变化的话应该把捕获的值当成一个参数传递。代码大概长这样
====================
func makethumbnail2(filename []string) {
ch := make(chan struct{})
for _, file := range filename {
go func(file string) {
fmt.Println(file)
//thumbnail.ImageFile(file)
ch <- struct{}{}
}(file)
}
for range filename {
<-ch
}
}
=================================
注意 go func 多了一个 file string 的参数,而 go func 结束的时候手动把 file 传递进去了。
因为 go func 有一个 file 参数,所以 go func 里面的 fmt.Println(file)的 file 实际上打印的是 go func 的参数。
而 go func 结束的时候在括号中传递的参数 file 是 for range 中当前的 file 。而 string 类型的参数是按照值的类型传递的。所以上面代码就会(无序)输出 file0 - file99
2016-12-30 19:22:14 +08:00
回复了 kopp123 创建的主题 Go 编程语言 一段 golang 代码不太懂就 golang 大牛解读
1. 贴代码的时候注意格式。你贴成这样鬼知道代码长啥样
2. 贴代码的时候把无关代码注释掉。比如 thumbnail.ImageFile(file)
3. 你上面贴的那一段代码格式化好以后大概长这样
===========================================
package main

import (
"fmt"
)

func makethumbnail2(filename []string) {
ch := make(chan struct{})
for _, file := range filename {
file = file
go func() {
fmt.Println(file)
//thumbnail.ImageFile(file)
ch <- struct{}{}
}()
}
for range filename {
<-ch
}
}

func main() {
var files []string
for i := 0; i < 100; i++ {
files = append(files, fmt.Sprintf("file%d", i))
}
makethumbnail2(files)
}

====================================
4. 下面来解答你的问题

1.1 你在 func() 里面 捕获了 file 变量。而 go 的捕获机制是按照引用捕获。 也就是说,如果我们在 func()外部改变 file 的值, func()内部的 file 也会受到影响
1.2 你的 func()是在另一个 goroutine 里面执行的。也就是说,一方面有 N 多个 func()在不同的 goroutine 里面执行。一方面第一个 for range 循环又在改变 file 的值。在第一个 for range 完成之前,你看到的输出应该是随缘产生的。而 for range 完成之后,则会输出最后一个文件名。
1.3 至于楼主的四个随机文件,那单纯是因为输出了 4 个文件以后,第一个 for range 完成了。
1.4 上面那段测试代码在我的环境下运行只输出了 10 个 file99
1.5 参考资料 https://www.goinggo.net/2014/06/pitfalls-with-closures-in-go.html
2016-10-26 08:44:44 +08:00
回复了 akiossdev 创建的主题 小米 只有我觉得小米 MIX 好看吗
小米这次真心牛逼了.
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     897 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 19ms UTC 20:38 PVG 04:38 LAX 12:38 JFK 15:38
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86