我试图建立程序在C与指针可以有人帮助plz?

iqih9akk  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(100)

i want to将一个数组、它的大小和指向内存中特定成员的指针接收到函数中,函数会检查指针是否指向数组中的某个成员,如果是,函数会打印数组中所有在发送地址之前的元素--不包括指针本身,如果不是函数将打印一个适当的消息。这是我试图做的,我有很多警告,我不知道如何修复

void printBeforeX(int* arr, int n, int* x);
int main(void)
{
    int size = 11;
    int offset = 0;
    int arr[11] = { 4 ,8 ,6 ,2 ,1 ,3 ,5 ,7 ,8 ,9 ,5 };
    printf("Please enter an offset to search in the array’s address domain");
    scanf("%d", &offset);
    getchar();

    printBeforeX(arr, size, arr + offset);
    getchar();
    return 0;
}
void printBeforeX(int* arr, int n, int* x)
{
    if (*x > n)
    {
        printf("Index %d is out of the array range",*x);
    }
}

例如,对于索引51 m,期望输出::4 8 6 2 1和对于11我期待:瀑布按摩

myzjeezk

myzjeezk1#

C语言中检查x是否引用数组元素的唯一方法是遍历它并检查相等。这不是有效的,但这是标准允许的唯一方法。任何其他比较都会引发未定义的行为。

void printBeforeX(int* arr, size_t n, int* x)
{
    int isInArray = 0;
    // arr points to the first element of the array
    // n is the total number of elements in the array
    // x points one element further than the last element to be printed

    for(size_t index = 0; index < n; index++)
    {
        if((arr + index) == x)
        {
            isInArray = 1;
            break;
        }
    }

    if (!isInArray)
    {
        printf("x is not referencing any element of the array\n");
        return;
    }
    
    //x and after x
    //for(size_t index = x - arr; index < n; index ++)
    //{
    //    printf("arr[%zu] (x[%zu]) = %d\n", index, index - (x - arr), arr[index]);
    //}
    for(size_t index = 0;  index < x - arr; index ++)
    {
        printf("arr[%zu] = %d\n", index,  arr[index]);
    }

}

int main(void)
{
    int arr[] = { 4 ,8 ,6 ,2};
    size_t size = sizeof(arr) / sizeof(arr[0]);

    // after x
    //for(size_t offset = 0; offset < 10; offset++)
    //{
    //    printf("offset = %zu -------------------------\n", offset);
    //    printBeforeX(arr, size, arr + offset);
    //}

    for(size_t index = 0;  index < x - arr; index ++)
    {
        printf("arr[%zu] = %d\n", index,  arr[index]);
    }

}

https://godbolt.org/z/9hYMEfrfj

相关问题