#includeint 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的地址,也就不会报错。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)