【C语言之数组篇】为什么数组名不能自增和自减而指针却可以

首先,要理解这个问题,需要对数组和指针有一定的了解,下面一起来回顾一下

数组的定义

要先定义后使用
格式:类型名称 数组名[常量表达式(可选)]

int arr[];//数组长度不确定 
int arr1[4];//数组长度为4

数组的初始化

数组初始化元素的值默认为0,没有初始化数组的元素值为随机数

  1. 初始化数组
# include <stdio.h>
int main(void)
{
	int a[4]={1,2,3};
	printf("%d\n",a[3]);//初始化数组值为0
	return 0;
}
/*
0
Press any key to continue
*/
  1. 无初始化数组
# include <stdio.h>
int main(void)
{
	int a[4];
	printf("%d\n",a[3]);//没有初始化元素值为系统随机数
	return 0;
}
/*
-858993460
Press any key to continue
*/

接下来聊聊赋值运算符、变量和常量

赋值运算符的定义:将一个表达式的值赋给一个左值,其中左值必须能够被修改,不能是常量!!!换句话说,赋值运算符的左值必须是变量

数组的使用

数组名代表第一个元素的首地址,是一个具体的常量,假如让数组名自增或自减,在其过程中必涉及到赋值的运算,而一个地址常量是不能作为赋值运算符的左值的,所以,编译就会报错

# include <stdio.h>
int main(void)
{
	int a[4];
	a++;//程序运行到这里就会报错
	printf("%d\n",a[3]);
	return 0;
}
/*
 error C2105: '++' needs l-value
*/

指针是用来存放地址的变量,而变量是可以作为赋值运算符的左值,所以指针是可以进行自增和自减的,但是要注意的是指针变量有两种表达方式,其产生的效果是完全不一样的

  • 第一种表达:指针变量操作地址进行自增或自减
# include <stdio.h>
int main(void)
{
	int arr[4]={1,2,3,4};
	int *p = arr;
	printf("%d,%d\n",p,*p);
	printf("%d\n",*p++);//按结合性,从右往左进行运算
	printf("%d,%d\n",p,*p);
	return 0;
}
/*
1703712,1
1
1703716,2
Press any key to continue
*/
  • 第二种表达:指针变量操作值进行自增或自减
# include <stdio.h>
int main(void)
{
	int arr[4]={1,3,5,7};
	int *p = arr;
	printf("%d,%d\n",p,*p);
	printf("%d\n",(*p)++);
	printf("%d,%d\n",p,*p);//p地址始终没有改变
	return 0;
}
/*
1703712,1
1
1703712,2
Press any key to continue
*/
  • 22
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值