为了账号安全,请及时绑定邮箱和手机立即绑定

无效操作:*int golang 类型的索引

无效操作:*int golang 类型的索引

Go
holdtom 2021-10-04 15:37:58
目标:我一直在使用 Go 解决“破解编码面试”一书中的问题 6。注意我不想帮助或解决这个问题给定一个由 NxN 矩阵表示的图像,其中图像中的每个像素为 4 个字节,编写一个方法将图像旋转 90 度。你能在现场做到这一点吗?问题:我创建了一个数组来表示矩阵,并创建了一个交换函数来顺时针交换矩阵中的元素。出于某种原因,我在尝试编译时遇到了这个非常奇怪的错误:./Q6.go:29: invalid operation: b[N - col - 1] (index of type *int)./Q6.go:30: invalid operation: b[N - row - 1] (index of type *int)我在哪里获得类型 *int 作为索引?在 Go 文档中, len(v) 返回类型 int 而其他所有内容都在 'N - col - 1' 的值中是类型 int 那么我如何获得类型 *int 索引?代码:package mainimport "fmt"func main() {    b := [][]int{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}} // 4 by 4 array going from 1 to 16    N := len(b)    for row := 0; row < N / 2; row++ {        for col := row; col < N - row - 1; col++ {            a := &b[row][col]            b := &b[col][N - row - 1]            c := &b[N - col - 1][col] // <-- Error here            d := &b[N - row - 1][N - col - 1] // <-- Error here            fourSwap(a, b, c, d)        }    }    for r := range b {        for c:= range b[0] {            fmt.Print(b[r][c])        }        fmt.Print("\n")    }}// [a][-][-][b]     [c][-][-][a]// [-][-][-][-] --> [-][-][-][-]// [-][-][-][-] --> [-][-][-][-]// [c][-][-][d]     [d][-][-][b]func fourSwap(a, b, c, d *int) {    temp := *b    *b = *a    *a = *c    *c = *d    *d = temp}
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您b在循环内声明,这会影响您的切片。


for row := 0; row < N / 2; row++ {

    for col := row; col < N - row - 1; col++ {

        a := &b[row][col]

        b := &b[col][N - row - 1] <<<< b is now an *int

        c := &b[N - col - 1][col] // <-- Error here

        d := &b[N - row - 1][N - col - 1] // <-- Error here

        fourSwap(a, b, c, d)

    }

}


查看完整回答
反对 回复 2021-10-04
?
青春有我

TA贡献1784条经验 获得超8个赞

您正在创建一个新的局部变量 b ,它是出现错误之前行上的一个指针:

b := &b[col][N - row - 1]


查看完整回答
反对 回复 2021-10-04
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信