【C语言】浅谈指针和一维数组的关系

1.用指针引用数组中各元素

        先定义一个一维数组a

        int a[5]={1,2,3,4,5};

        再定义一个指向该数组首元素的指针变量p

        int *p=a; // 也可以写为  int *p=&a[0];

        然后用for循环遍历数组并输出

        for (i=0;i<5;++i)//数组的元素个数作为循环变量

        {

                printf("%d",p[i]); // p[i] 等价于 *(p+i) 等价于 a[i] 等价于*(a+i)

        }

/*也可以写成下面的形式*/

        for ( ;p<a+5;++p)//数组各元素的地址作为循环变量

        {

                printf("%d",*p); 

        }

        完整代码如下 

/*用指针访问数组*/
#include<stdio.h>
int main()
{
	int a[5]={1,2,3,4,5};
	int *p=a;//等价于&a[0]
	int i;
	
	for (i=0;i<5;++i)//数组元素个数作为循环变量 
	{
		printf("%d ",*(p+i));//这里的 *(p+i)等价于 *(a+i)等价于a[i]等价于p[i] 
	}
	
/*上面的for循环也可写成下面这样*/

//	for (;p<a+5;++p)//数组地址作为循环变量 
//	{
//		printf("%d ",*p);
//	}

	return 0;
} 

 2.指针变量的自增和自减运算

        指针变量自增 p++ 或++p是让指针指向下一个元素的地址。同理,指针变量自减 p-- 或--p是让指针指向上一个元素的地址。

        指针运算符 “ * ” 和自增自减运算符 “ ++ ” “ -- ” 的优先级相同,且结合方向是自右向左,所以

*p++ 即为 *(p++) ,*++p 即为 *(++p)。在实际编程中,为了提高程序的可读性,往往要加上括号。

        注意:数组名a是首元素的地址,是个常量,所以不能进行自增自减运算。只有变量可以进行自增自减运算。

3.指针变量所占字节数

        在32位机中,不管是什么基类型,系统给指针变量分配的空间都是4字节。

        在64位机中,不管是什么基类型,系统给指针变量分配的空间都是8字节

        以64位机为例,64位机总共有64根地址总线,每根地址总线有0和1,或者说是高电压和低电压 这两种状态。内存单元中的每个地址都由这64根地址总线以不同的状态组合而成的。所以64位是8字节,指针变量占8字节,就正好能存储下所有内存单元里的地址。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值