Maison > développement back-end > Golang > En quoi les pointeurs vers des tableaux diffèrent-ils entre C et Go, et quelle est l'approche préférée dans Go ?

En quoi les pointeurs vers des tableaux diffèrent-ils entre C et Go, et quelle est l'approche préférée dans Go ?

Susan Sarandon
Libérer: 2024-12-14 00:54:10
original
604 Les gens l'ont consulté

How Do Pointers to Arrays Differ Between C and Go, and What's the Preferred Approach in Go?

Utiliser des pointeurs vers des tableaux dans Go

En C, accéder à un tableau via un pointeur est une technique fondamentale. Cependant, dans Go, il semble y avoir une certaine ambiguïté concernant cette opération lorsqu'il s'agit de tranches. Entrons dans les détails.

Considérons la fonction de style C suivante qui prend un pointeur vers un tableau :

void conv(int *x, int xlen, int *h, int hlen, int **y) {
    for (int i = 0; i < xlen; i++) {
        for (int j = 0; j < hlen; j++) {
            *(*y)[i + j] += x[i] * h[j];
        }
    }
}
Copier après la connexion

Dans Go, cependant, en essayant d'accéder au pointeur vers le tableau, y, de la même manière, entraîne une erreur du compilateur :

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]
        }
    }
}
Copier après la connexion

Le message d'erreur indique que y[i j] est un index de type *[]int, qui n'est pas valide.

Passer des tableaux et des tranches

La solution à ce problème réside dans la compréhension de la nature des tableaux et des tranches dans Go. Selon la documentation Go, lors du passage d'un tableau à une fonction, il est généralement préférable de transmettre une tranche (une référence au tableau) au lieu d'un pointeur vers le tableau.

Utiliser des tranches à la place

Pour réécrire la fonction conv à l'aide de tranches, on peut simplement passer une tranche de []int, comme vu dans ce qui suit exemple :

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]
        }
    }
}
Copier après la connexion

Dans ce cas, y est une tranche régulière, et accéder à ses éléments est simple.

Conclusion

Alors que le concept L'utilisation de pointeurs vers des tableaux est courante en C, elle n'est généralement pas recommandée en Go. Au lieu de cela, passer des tranches fournit un moyen plus efficace et idiomatique de référencer des tableaux dans les fonctions Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal