for 循环变量取内存地址

Posted lavin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for 循环变量取内存地址相关的知识,希望对你有一定的参考价值。

前几天提交的代码进行测试的时候发现变量无法赋值,原始代码如下:

  for _, asset := range dspInfo.native.Assets {
          var resAsset protocol.ResAsset
          resAsset.Id = asset.Id
          resAsset.Required = &asset.Required
          resAsset.AssetType = asset.AssetType
}

经过分析,定位到问题:

循环中使用到了内存地址,将asset.Required 的地址赋值给新的变量,不仔细看感觉没有问题。

实际使用过程中由于asset 是一个变量,定义后for 循环的整个过程都不会变化,后面的asset.Required 会把前面的值覆盖,因此会出现问题。

进行如下修改即可:

 

  for idx, asset := range dspInfo.native.Assets {
          var resAsset protocol.ResAsset
          resAsset.Id = asset.Id
          resAsset.Required = &dspInfo.native.Assets[idx].Required
          resAsset.AssetType = asset.AssetType
}

 

以上是关于for 循环变量取内存地址的主要内容,如果未能解决你的问题,请参考以下文章

20160206.CCPP体系具体解释(0016天)

20160206.CCPP体系详解(0016天)

bat中for循环,实现变量自增的2种方式,附源码下载地址

bat中for循环,实现变量自增的2种方式,附源码下载地址

js怎么循环出变量,然后一个个储存到数组中?

迭代器与for循环的本质