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

本文深入浅出地介绍了C语言中的指针概念,包括指针的赋值与取值、指向指针的指针,以及指针数组和数组指针的使用。通过实例代码解释了指针如何作为地址存储变量,并展示了如何通过指针操作数组和字符串。此外,还探讨了指针在数组和字符串操作中的重要作用,帮助读者更好地理解和掌握C语言中的指针操作。
摘要由CSDN通过智能技术生成


前言

在初学习指针时,总觉得学不懂,看了很多资料后,才有所了解,这里我们简单讲解一下我对指针的认识。

一、指针是个啥

举个例子,在诊所里,有许多的柜子,里面装着不同的药,小时候经常觉得医生拿药是件很神奇的事。
其实啊,指针也像这么一个个的柜子,只不过里面装着的是每个药的存放地址而这个地址就是指针,这个指针也就指向了这个特别的药

二、怎么操作

1,指针赋值与取值

代码如下:

#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
int main()
{
    char *a[]=
    {
		"good good study",//其实字符串就是第一个字符的地址 
		"day day up"		
	};
    printf("%s",a[1]) ;//通过一个字符的地址打印整个字符串
    return 0;
}

结果为:
在这里插入图片描述

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

2,数组指针

数组指针是一个指针,指向的是数组,也就是数组的地址。表示为(*p)[ ]

#include <stdio.h>
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语言更加地神奇,用法也很多,还需要读者慢慢体会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值