Go语言的指针的一些测试

参考URL:

http://ilovers.sinaapp.com/drupal/node/33

1). 指针在 c 中是个重要的东西,& 和 * 一个取地址、一个解析地址,这是 c 的用法,go 中貌似也是这样,but !

2). go 中的指针是个“透明”的东西,也就是偶们可以不通过 * 访问,而是直接访问,比如可以不是 (*q).Y = 20 而是 q.Y = 20,有些伤天害理的赶脚!

3). 结构体,结构体指针,结构体指针的指针,结构体指针的指针的指针;

4). 再说明一下:要访问指针 p 指向的结构体中某个元素 x,不需要显式地使用 * 运算,可以直接 p.x ;

package main

import (
	"fmt"
)

type Vertex struct {
	X, Y int
}

var (
	p = Vertex{1, 2}
	q = &Vertex{1, 2}
	r = Vertex{X: 1}
	s = Vertex{}
)

func main() {
	/*
	p := Vertex{1, 2}
	q := &p
	q.X = 10
	(*q).Y = 20
	r := &q
	s := &r
	(**s).Y = 30

	fmt.Println(p, q, r, s, *q, *r, *s, **r, **s, ***s)
	*/
	fmt.Println(p, q, r, s)
	v := new(Vertex)
	fmt.Println(v)
	v.X, v.Y = 11, 9
	fmt.Println(v)
}

  

时间: 2024-09-29 02:35:21

Go语言的指针的一些测试的相关文章

malloc-C语言字符指针问题求解答

问题描述 C语言字符指针问题求解答 main(){ char * a; a=(char * )malloc(40); scanf(""%s""* a );}上面代码中的scanf(""%s""* a);这行为什么是合法的?请赐教!不好意思第一次代码输错了-_- 解决方案 创建了一个40个字符长度的缓冲区,然后输入字符到这个缓冲区中.你测试下就知道了. 解决方案二: a=(char)malloc(40); 看不懂这要干嘛,怎么不

C语言字符串指针的一个小问题

问题描述 C语言字符串指针的一个小问题 题目如图,答案是又定义了一个指针变量做的.而我的答案编译出来结果也对,就是会运行结束之后出现一个警告对话框.不明白怎么回事,第三幅我的答案有什么问题吗?请问如果不用答案的那种编译方法,我的这种方法可不可行?能改进不报错吗? 解决方案 你的程序没有发现问题 #include <stdio.h> void fun(char * a) { int i = 0, j = 0; while (a[i] == '*') i++; for (; a[i] != '';

Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面也讲了许多,也提到了多级指针的概念,那具体我们怎么去操作呢 #include <stdio.h> #include <stdlib.h> main(){ int i = 3; //一级 int* p = &i; //二级,保存一级指针 int** w = &p; //三

c语言-求问一个C语言字符指针的问题

问题描述 求问一个C语言字符指针的问题 #include void Initialize (char * a, char * b) { a[0] = 'T'; a[1] = 'h'; a[2] = 'i'; a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's'; a[7] = ' '; a[8] = 'A'; a[9] = ''; b = a; b[8] = 'B'; } #define ARRAY_SIZE 10 char a[ARRAY_SIZE];

c语言二级指针申请空间问题

问题描述 c语言二级指针申请空间问题 char **data; *data = malloc (100); 为什么段错误 应该怎么申请 解决方案 *data = malloc (sizeof(char *) * 100); for (int i = 0; i < 100; i++) { data[i] = malloc(sizeif(char)); } 解决方案二: **只申请两次.共1M左右内存 char **data=malloc(sizeof(char *)*100); data[0] =

c语言-C语言利用指针来存输入的字符串的问题

问题描述 C语言利用指针来存输入的字符串的问题 这个函数是可以得到str的: #include <ctype.h> char * getword(char * str) { int i; int ch; while ((ch = getchar()) != EOF && !isspace(ch)) *str++ = ch; *str = ''; if (ch == EOF) return NULL; else { while (ch != ' ') ch = getchar()

二维数组-关于C语言的指针数组的问题

问题描述 关于C语言的指针数组的问题 老师说过 传递一个二维数组时 必须指定 第二维的 个数 才能正确索引 数组1维+1的位置 函数参数传递 都是写成这样 abc(int* array[10]) 但是看到main函数的 参数确是 int main(int argc, char* argv[], char* env[]) 这样写 能索引argv+1 的位置吗? 解决方案 当然可以,C语言是一种简陋和原始的语言,它简陋的程度对于用惯了高级编程语言的人来说匪夷所思,比如你完全可以越界访问数组,至于结果

c语言中指针p 和 p++的问题

问题描述 c语言中指针p 和 p++的问题 int main() { int * ptr=(int*)malloc(10);//arr; printf("%dn",ptr); printf("%dn",ptr++); } 为什么输出的值是一样的呢? 解决方案 ptr就是当前指针, ptr++,在引用是,取得是当前指针的值,使用之后,该值自加,这是后自加的方式. 同理(*ptr)++ 值为当前指针所指的值,运算过后,指针指向下一个 解决方案二: ptr是一个指向数组的

c语言数组指针,不报错,就停止工作,请问哪里错了

问题描述 c语言数组指针,不报错,就停止工作,请问哪里错了 第一次提问,多包含,也不报错,为什么一运行就按停止工作报错 #include #include #include struct arr { int *pbase;//第一个元素的首地址 int len;//数组所能容纳的最大元素个数 int cnt;//当前数组有效元素个数 }; void init_arr(struct arr *p1,int length) { (p1->pbase) = (int *)malloc(sizeof(i