指针没有接收到'arr'的值

问题描述 投票:0回答:1

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

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

c function pointers
1个回答
1
投票

尝试在 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
    }
}
  
© www.soinside.com 2019 - 2024. All rights reserved.