c指针不接收arr的值


函数接收指针和arr的长度我试着用指针在arr中滑动位置。它告诉我:抛出异常:写访问违规。p1是0x4D1335。函数:
void func(int *ptr,int len)
{
int *p1 = ptr;
int i;
int save = 0;
int count = 0;
for ( i = 0; i < len; i++)
{
*p1++;
printf("%d", *p1);
}
while (ptr != p1 || count != len/2)
{
count++;
save = *ptr;   //The error is here (Exception thrown: write access violation.p1 was 0x4D1335.)
*ptr = *p1;
*p1 = save;
*ptr++;
*p1--;
}
}

main:

void main()
{
int arr[3] = { 1,2,3 };
int *ptr = &arr[0];
int i;
func(ptr, 3);
for (i = 0; i < 3; i++)
{
printf("%d", arr[i]);
}
}

如果有人有任何想法,那将非常有帮助:(

尝试在func((中解释下面的正确代码。请注意*ptr++相当于*(ptr++(,即您正在增加指向下一个元素的指针,并取消对该位置的引用,这可能会在数组末尾引发问题。

void func(int *ptr, int len)
{
int *p1 = ptr;
int i;
int save = 0;
int count = 0;
for ( i = 0; i < len; i++)
{
printf("%d", *p1);
p1++;  //<-----------------------Increase the p1

}
--p1;      //<-----------Decrease the p1 by 1, as it points to one 
//location after array end.
while (count != len/2)
{
count++;
save = *ptr;
*ptr = *p1;
*p1 = save;
ptr++;  //<----------increase the ptr
p1--;   //<----------decrease the p1
}
}

最新更新