Цель: Я решал вопрос 6 из книги «Крекинг для интервью по кодированию» с помощью Go.Недопустимая операция: индекс типа * int golang
Примечание Я НЕ wan't ПОМОЩИ ИЛИ РЕШЕНИЕ к этому вопросу
Учитывая изображение, представленное матрицу 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 main
import "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
}
код объявляет новую переменную 'b' внутри цикла, что тени внешний' b'. Я не уверен, хотите ли вы этого или нет. Я не понимаю, что вы пытаетесь сделать с изображением. – user4752457
BTW, ваш 'fourSwap' можно упростить с помощью многозадачности Go. '* a, * b, * c, * d = * c, * a, * d, * b'. –
Как говорит @tvblah, это из-за затенения 'b'. Самое простое исправление состоит в том, чтобы изменить кусочек срезов с 'b: = [] [] int {' на другое имя. В противном случае сразу после 'b: = & b [x] [y]' у вас есть новый 'b' типа' int' и больше не может его индексировать. –