该函数接收指针和“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--;
}
}
主():
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
}
}