C语言指针,指针数组和数组指针

C语言指针,指针数组和数组指针,第1张

文章目录
  • 前言

  • 一、指针是个啥


  • 二、怎么 *** 作

    • 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也会改变。


2,指向指针的指针

代码如下(示例):

#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;
}

结果为:

其实字符串就是就是数组,而数组就是指针,表达的是第一个字符的地址,通过%s打印时,会从指针处开始,到结束符’\0’结束。


2,数组指针

数组指针是一个指针,指向的是数组,也就是数组的地址。


表示为(*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语言更加地神奇,用法也很多,还需要读者慢慢体会。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存