- 前言
一、指针是个啥
二、怎么 *** 作
- 1,指针赋值与取值
- 2,指向指针的指针
三、其他神奇的指针
- 1,指针数组
- 2,数组指针
- 总结
前言
在初学习指针时,总觉得学不懂,看了很多资料后,才有所了解,这里我们简单讲解一下我对指针的认识。
一、指针是个啥
举个例子,在诊所里,有许多的柜子,里面装着不同的药,小时候经常觉得医生拿药是件很神奇的事。
其实啊,指针也像这么一个个的柜子,只不过里面装着的是每个药的存放地址,而这个地址就是指针,这个指针也就指向了这个特别的药。
二、怎么 *** 作 1,指针赋值与取值
代码如下:
#include
int main()
{
int a=3;
int *p=&a;
printf("a的值为:%d\n",a);
printf("a的地址为:%p\n",&a);
printf("p的值为:%p\n",p);//p为a变量的地址
printf("*p的值为:%d\n",*p); //*p表示访问该地址下的值
return 0;
}
结果为:
可以看出,&a和p的值相同,p为a变量的地址 ,p和a相同,而p表示访问该地址下的值即a。
如果将改变*p那么,a也会改变。
代码如下(示例):
#include
int main()
{
int a=3;
int *p=&a;
int **pp=&p;
printf("a的值为:%d\n",a);
printf("p=%d\n*p=%d\n",p,*p);
printf("pp=%d\n*pp=%d\n**pp=%d\n",pp,*pp,**pp);
return 0;
}
结果如下:
通过对比数字,不难发现a的值与p,**pp的值是一样的,而p和pp的值也相同,这是为啥呢?其实吧,我们还是可以看作药房,之前不是说了吗,如果药的地址是指针,放在一个个柜子里,那么这些柜子是不是也有他们的地址,你也需要去找到,那我我们就再用一些柜子来放这些放着药的地址(就是这些柜子)的地址,可能不太好理解,需要多想一想,其实这p就是存放一个变量的地址而pp就是存放地址的地址,也就是指针的指针。
所以pp放的是p的地址,而*pp就是访问的p,**pp就是先访问p,再访问a。
三、其他神奇的指针 1,指针数组
指针数组,是一个数组,里面存放着地址,可以存放整数地址,也可以存放字符串地址,即数组地址。
表示为*p[ ]
#include
int main()
{
char *a[]=
{
"good good study",//其实字符串就是第一个字符的地址
"day day up"
};
printf("%s",a[1]) ;//通过一个字符的地址打印整个字符串
return 0;
}
结果为:
2,数组指针其实字符串就是就是数组,而数组就是指针,表达的是第一个字符的地址,通过%s打印时,会从指针处开始,到结束符’\0’结束。
数组指针是一个指针,指向的是数组,也就是数组的地址。
表示为(*p)[ ]
#include
int main()
{
int a[3]={1,2,3};
int (*p)[3]=&a;
for(int i=0;i<3;i++)
{
printf("%d",*(*p+i));
}
return 0;
}
结果为:
总结可能有点难以理解,其实数组指针指向的是整个数组,而非第一个字符的地址,这一点很重要,只有取*以后才表示整个数组,即第一个字符的地址,这个时候才能将指针前后移动访问不同的字符的地址,然后再访问这个地址上的值。
总之,指针其实还有很多 *** 作,也使得C语言更加地神奇,用法也很多,还需要读者慢慢体会。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)