我有一些关于在程序中使用数组指针的问题。当我使用一些数组名称时(这是指向第一个数组元素的 const 指针)
char charTab[] = "ABCDEFGHIJKLMNOPRSTUWXYZ"; /* Basic data buffer */
char *charPtr = charTab; /* Assign */
charPtr += 3; /* It's ok, now we point 4th element */
charTab += 3; /* No, the lvalue required for '+' operand */
但是当我创建让我们说以下功能:
void CharTabMove(char *tabToMove, int noToMove);
有定义
void CharTabMove(char *tabToMove, int noToMove)
{
printf("-------IN FUNCTION---------\n");
printf("It's pointing to %c\n", *tabToMove);
tabToMove += noToMove;
printf("Now it's pointing to %c\n", *tabToMove);
printf("-------LEAVING FUNCTION---------\n");
fflush(stdout);
}
该函数允许沿数组移动该指针而没有问题。当然,离开函数后,指针仍然指向 charTab 的第一个元素,但为什么允许函数移动常量指针呢?感谢您的回复,我正试图向我 11 岁的侄子解释这一点:)
---几年后编辑---
好的,时间过去了,现在我明白为什么我的问题没有准确表述。const pointer
我通过在传递它函数之前和之后使用引用数组名称的术语来误导你。换句话说,问题归结为:
为什么不允许这样做:
char charTab[] = "ABCDEFGHIJKLMNOPRSTUWXYZ"; /* Basic data buffer */
charTab += 3; /* No, the lvalue required for '+' operand */
虽然这是允许的:
char charTab[] = "ABCDEFGHIJKLMNOPRSTUWXYZ"; /* Basic data buffer */
void CharTabMove(char *tabToMove, int noToMove)
{
tabToMove += noToMove;
}
CharTabMove(charTab)
答案是我收集并完善了您的所有答案,charTab
其行为几乎就像指向数组第一个元素的常量指针,但本质上不是左值或指针语句,因此不允许进行算术运算。当将它传递给函数时,这几乎就像指向第一个数组元素的常量指针一样,将被强制转换并作为常规指针按值传递,因此可以对其执行操作。