go语言2级指针 go 指针运算
二级指针和指针数组的表现方式
char *a[3]={"ert","tre","ret"};表示一个指针数组,定义的是一个数组,数组里面存的是指针,也就是:"ert","tre","ret";char **p;定义一个指向指针的指针,p=a,也就是把数组a的首元素的地址赋值给a,也就是p=("ert");那么*p="ert",**p="ert";
从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供网站设计、成都网站建设、网站策划、网页设计、域名申请、网页空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。
cout**pendl;//输出e,第一个元素的首字母
cout**(p+1)endl;//输出t,第二个元素的首字母
cout*(*(p+1)+1)endl;//输出r,第三个元素的首字母
int pthread_join (pthread_t tid, void ** status);为什么是2级指针
2级指针,主要是用于传出参数,也就是用于接收返回值。
使用的时候,可以定义1级指针status,然后调用传status。
2级指针和1级指针分别用在什么地方
2级指针是指向指针的指针,记住2级指针指向的还是个地址,就可以了。
而1级指针所指向的变量要与指针变量类型相符才行。
C语言传递参数都是传递"值",那么当你想修改这个"值"的时候,就需要用到指针.
试想一下,当你需要修改一个指针的时候,那么就需要指针的指针了
二级指针是什么意思?
首先任何值都有地址 ,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存放,是空间就具有地址 ,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址,
一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址,指针就是两个用途提供目标的读取或改写, 那么二级指针就是为了提供对于内存地址的读取或改写
指针的表现形式是地址,核心是指向关系指针运算符“*”的作用是按照指向关系访问所指向的对象.如果存在A指向B的指向关系,则A是B的地址,“*A”表示通过这个指向关系间接访问B.如果B的值也是一个指针,它指向C,则B是C的地址,“*B”表示间接访问C如果C是整型、实型或者结构体等类型的变量或者是存放这些类型的数据的数组元素,则B(即C的地址)是普通的指针,称为一级指针,用于存放一级指针的变量称为一级指针变量。
A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针.
你可以将二维数组名理解成一个二级指针……
可以看看这个:
#include stdio.h
#include stdlib.h
#include string.h
void memorylocate(char **ptr)
{
*ptr=(char *)malloc(10*sizeof(char));
}
int main()
{
char *buffer;
memorylocate(buffer);
strcpy(buffer,"12345");
printf("buffer %s\n",buffer);
return 0;
}
二级指针
你分析下这个函数想要干什么就会明白了
HL不是头结点指针,是指针的指针!
参考:
你有一个任意指针P,你想要它等于NULL,有两种方法:通过P、或者P的指针
如果它是全局的,你可以在任何地方直接用P=NULL,包括函数里,都可以让原始P变成NULL,
如果不是全局,而且你想在函数里通过参数传递修改它,就要先取得函数外的P操作权,只能通过P的指针,你直接传P进去,得到的只是P副本,所以必须通过P的指针P,然后在函数里用*(P)得到函数外面的P,才能修改到P!这些正逆运算就是你要使用函数所付出的代价,不过得到了其它的好处!
首先说下这函数,你是觉得这样定义也可以?
void InitList(struct sNode* HL)
{
HL=NULL;
}
然后:
InitList(p);
这样是不行的,它改变的不是你的p,而是P的一个副本,可以假想为P1,刚传进去时,这P1跟P一样指向同一个东西,当函数执行完,P1就变空了,而P还是原来的P!这个函数就跟外界没有任何联系。如果用*HL,得到一个struct sNode,能修改但并不是这函数要的效果!
一级指针的例子:
int a=0;
//想让a变成2,你如果这样声明函数:
/*void Init(int HL)
{
HL=2;
}
*/
Init(a);//不行
/*只能这样:
void Init(int* HL)
{
*HL=2;
}
*/
//:然后
Init(a);
文章标题:go语言2级指针 go 指针运算
文章路径:http://scyanting.com/article/hjcdis.html