亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用指向數組的指針

使用指向數組的指針

Go
不負相思意 2021-03-30 09:11:51
我正在嘗試使用Google的Go語言,并且遇到了C語言中相當基本的東西,但到目前為止我看過的文檔中似乎都沒有涉及到當我將指向某個切片的指針傳遞給函數時,我認為我們可以通過以下方式來訪問它:func conv(x []int, xlen int, h []int, hlen int, y *[]int)    for i := 0; i<xlen; i++ {        for j := 0; j<hlen; j++ {            *y[i+j] += x[i]*h[j]        }    } }但是Go編譯器不喜歡這樣:sean@spray:~/dev$ 8g broke.gobroke.go:8: invalid operation: y[i + j] (index of type *[]int)足夠公平-這只是一個猜測。我有一個相當簡單的解決方法:func conv(x []int, xlen int, h []int, hlen int, y_ *[]int) {    y := *y_    for i := 0; i<xlen; i++ {        for j := 0; j<hlen; j++ {            y[i+j] += x[i]*h[j]        }    }}但是,肯定有更好的方法。令人討厭的是,在Go上搜索信息不是很有用,因為大多數搜索字詞都會出現各種C / C ++ /無關的結果。
查看完整描述

3 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

具有Empty的類型[],例如[]int實際上是切片,而不是數組。在Go中,數組的大小是該類型的一部分,因此要真正擁有一個數組,您需要具有[16]int,而指向的指針將是*[16]int。因此,您實際上已經在使用切片,而指向切片的指針*[]int則是不必要的,因為切片已經通過引用傳遞了。

例子:


package main

import "fmt"


func sumPointerToArray(a *[8]int) (sum int) {

    for _, value := range *a { sum += value }

    return

}

func sumSlice (a []int) (sum int) {

    for _, value := range a { sum += value }

    return

}

func main() {

    array := [...]int{ 1, 2, 3, 4, 5, 6, 7, 8 }

    slice := []int{ 1, 2, 3, 4 }

    fmt.Printf("sum arrray via pointer: %d\n", sumPointerToArray(&array))

    fmt.Printf("sum slice: %d\n", sumSlice(slice))

    slice = array[0:]

    fmt.Printf("sum array as slice: %d\n", sumSlice(slice))

}

編輯:自首次發布以來,已更新以反映Go中的更改。


查看完整回答
反對 回復 2021-04-26
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

長度是數組類型的一部分,您可以通過len()內置函數來獲取數組的長度。因此,您無需傳遞xlen,hlen參數。


在Go中,將數組傳遞給函數時,幾乎總是可以使用slice。在這種情況下,您不需要指針。實際上,您無需傳遞y參數。這是C輸出數組的方式。


在Go風格中:


func conv(x, h []int) []int {

    y := make([]int, len(x)+len(h))

    for i, v := range x { 

        for j, u := range h { 

            y[i+j] = v * u 

        }   

    }   

    return y

}

調用函數:


conv(x[0:], h[0:])


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 240 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號