输出结果:6
#include <stdio.h>
int main(void)
{
int a[2][2] = {{1,2}, {3,4}}
int b[2][2] = {{5,6}, {7,8}}
int (*p1)[2] = a
int (*p2)[2] = b
int (*q[2])[2] = {p1, p2} 这样才是正确的定义!
printf("%d\n", *(*q[1]+1))
return 0
}
但在tc2.0和bc3.1中提示非法初始化!
但把
int (*q[2])[2] = {p1, p2}
改成
int (*q[2])[2]
q[0] = p1
q[1] = p2
可以通过!
原因暂不清楚,估计是老旧的编译器不支持太复杂的定义!
其实最好的方法是使用typedef,简单明了,可读性大大提升!
#include <stdio.h>
int main(void)
{
typedef int (*PA)[2] 使用typedef
int a[2][2] = {{1,2}, {3,4}}
int b[2][2] = {{5,6}, {7,8}}
int (*p1)[2] = a
int (*p2)[2] = b
PA q[2]= {p1, p2} 这样可读性是否大大的增加?!
printf("%d\n", *(*q[1]+1))
return 0
}
一.几种公共方法
1)Print: 输出到控制台(不接受任何格式化,它等价于对每一个操作数都应用 %v)
print 在golang中 是属于输出到标准错误流中并打印,官方不建议写程序时候用它。可以再debug时候用
2)Println: 输出到控制台并换行
3)Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出整形变量和整形等)
4)Sprintf:格式化并返回一个字符串而不带任何输出
5)Fprintf:来格式化并输出到 io.Writers 而不是 os.Stdout
二.带占位符输出--网址: https://www.jianshu.com/p/8be8d36e779c
和python差不多的道理,这里简单补充
v 值的默认格式
%+v 添加字段名(如结构体)
%#v 相应值的Go语法表示
%T 相应值的类型的Go语法表示
%% 字面上的百分号,并非值的占位符
%c 相应Unicode码点所表示的字符
%x 十六进制表示,字母形式为小写 a-f
%X 十六进制表示,字母形式为大写 A-F
%U Unicode格式:U+1234,等同于 "U+%04X"
于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一类型的数据。
定义一个指针变量,将变量a的地址赋给指针变量p。这样,指针变量p也就指向了变量a所在的内容空间。
new 函数返回一个指针变量
fmt.scan() 就是传入一个指针变量。
两种方法都可以使用。
以上简要介绍了go语言中的指针和结构体。