go语言数组和指针 go语言数组和指针的区别( 三 )


【go语言数组和指针 go语言数组和指针的区别】double *doublePtr; // Pointer to a double
// Assign the address of the coins array to doublePtr
doublePtr = coins;
// Display the contents of the coins array
// Use subscripts with the pointer!
cout lt;lt; setprecision (2);
cout lt;lt; "Here are the values in the coins array:\n";
for (int count = 0; count lt; NUM_COINS; count++)
cout lt;lt; doublePtr [count] lt;lt; " ";
// Display the contents of the coins array again, but this time use pointer notation with the array name!
cout lt;lt; "\nAnd here they are again:\n";
for (int count = 0; count lt; NUM_COINS; count++)
cout lt;lt; *(coins + count) lt;lt; " ";
cout lt;lt; endl;
return 0;
}
程序输出结果:
Here are the values in the coins array: 0.05 0.1 0.25 0.5 1 And here they are again: 0.05 0.1 0.25 0.5 1
当一个数组的地址分配给一个指针时,就不需要地址运算符了 。由于数组的名称已经是一个地址,所以使用运算符是不正确的 。但是,可以使用地址运算符来获取数组中单个元素的地址 。
go语言函数如何传递数组变量按值传递函数参数,是拷贝参数go语言数组和指针的实际值到函数的形式参数的方法调用 。在这种情况下,参数在函数内变化对参数不会有影响 。
默认情况下,Go编程语言使用调用通过值的方法来传递参数 。在一般情况下 , 这意味着,在函数内码不能改变用来调用所述函数的参数 。考虑函数swap()的定义如下 。
代码如下:
/* function definition to swap the values */
func swap(int x, int y) int {
var temp int
temp = x /* save the value of x */
x = y/* put y into x */
y = temp /* put temp into y */
return temp;
}
现在,让go语言数组和指针我们通过使实际值作为在以下示例调用函数swap():
代码如下:
package main
import "fmt"
func main() {
/* local variable definition */
var a int = 100
var b int = 200
fmt.Printf("Before swap, value of a : %d\n", a )
fmt.Printf("Before swap, value of b : %d\n", b )
/* calling a function to swap the values */
swap(a, b)
fmt.Printf("After swap, value of a : %d\n", a )
fmt.Printf("After swap, value of b : %d\n", b )
}
func swap(x, y int) int {
var temp int
temp = x /* save the value of x */
x = y/* put y into x */
y = temp /* put temp into y */
return temp;
}
让go语言数组和指针我们把上面的代码放在一个C文件 , 编译并执行它,它会产生以下结果:
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200
这表明 , 参数值没有被改变,虽然它们已经在函数内部改变 。
通过传递函数参数 , 即是拷贝参数的地址到形式参数的参考方法调用 。在函数内部,地址是访问调用中使用的实际参数 。这意味着,对参数的更改会影响传递的参数 。
要通过引用传递的值,参数的指针被传递给函数就像任何其go语言数组和指针他的值 。所以 , 相应的,需要声明函数的参数为指针类型如下面的函数swap() , 它的交换两个整型变量的值指向它的参数 。
代码如下:
/* function definition to swap the values */
func swap(x *int, y *int) {
var temp int
temp = *x/* save the value at address x */
*x = *y/* put y into x */
*y = temp/* put temp into y */
}
现在,让go语言数组和指针我们调用函数swap()通过引用作为在下面的示例中传递数值:
代码如下:
package main
import "fmt"

推荐阅读