为什么在printf中 数组名++不行,而数组名+1却可以

为什么在printf中 数组名++不行,而数组名+1却可以,第1张

为什么在printf中 数组名++不行,而数组名+1却可以
#include
int main(){
	int arry[3] = {1,2,3};
	int *p = arry;
	printf("%dn",*p);
	printf("%dn",*p++);
	printf("%dn",*arry++);
	printf("%dn",*(arry+1));
} 

对上面的代码进行编译发现第三个printf出现报错,错误信息:lvalue required as increment operand

个人理解:数组名表示数组首元素地址,而*arry++ *** 作会改变了arry的首地址;由于arry是数组,其元素首地址应当是固定的,不能改变。。所以编译会报错。

而将该语句放在函数封装中却又不会报错了:
经过本人的思考和通过打印地址验证:在函数调用时,是将主函数的arry的首元素地址值拷贝过去放入函数中的arry变量的地址中;所以对该变量进行*arry++不会改变主函数中arry的地址,也就不会报错。

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

原文地址: https://outofmemory.cn/zaji/5702788.html

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

发表评论

登录后才能评论

评论列表(0条)

保存