var cstrs []*C.char
header := (*reflect.SliceHeader)(unsafe.Pointer(&cstrs))
header.Data = cstrspointer
header.Len = cstrslength
for _, cstr := range cstrs {
gostrs = append(gostrs, C.GoString(cstr))
}
goto
是转向语句,按其英文含义就可理解
用法
标号:
语句;
go
to
标号;
或者
go
to
标号;
标号:
语句;
标号和goto必须包括处于同一个函数内
标号的写法跟变量名一样不能和关键词相同,后面必须带冒号
当程序执行到go
to这个语句时,程序就转跳到标号后面的语句去了
例
int
x=1
语句1:
x=x+1
if(x<100)
goto
语句2
cout<<"x=100"<<endl
当x小于100,执行if
后面的goto语句,于是转跳到语句2处执行语句1后面的语句x=x+1,接着if语句,
如此反复。。。。。。,直到x=100
if语句括号表达式为假不执行后面的goto语句,
于是跳过执行cout语句输出x=100这几个字符
可以使程序跳转到标记位置,可以和if语句构成循环,但是对于goto语句的使用争议很大,它能使程序很轻松的跳出多个嵌套循环,但是会破坏程序的模块化,使程序的可读性变差,项目越大这个缺点越明显,所以个人观点不建议使用,了解就可以了,goto语句的一些用处while和dowhile循环可以代替。
用法举例:
#include
<stdio.h>
#include
<stdlib.h>
int
main()
{
char
input
loop:
printf("Hello,
world!\n")
printf("Repeat?(y/n)")
scanf("%c",
&input)
if
(input
==
'y')
{
goto
loop
}
system("pause")
return
0
}