我该如何测试这个C函数

Its*_*ret 5 c pointers

作为一个练习,我有一个奇怪的问题:

编写一个函数,该函数将指针的指针的指针指针指向int的指针的指针作为参数,并为其赋值.

我认为我写的功能是对的(请更正,如果不是)但我该如何测试呢?

void function(int *********anInt)
{
    *********anInt = 5;
}
Run Code Online (Sandbox Code Playgroud)

我试过了 :

int main(void) {
    int *********nbr = malloc(sizeof(int));
    function(nbr);
    printf("%d", *********nbr);
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个段错误,我只是了解mallocpointers,所以我不完全理解.

md5*_*md5 18

当然,你可以测试它,虽然它看起来很奇怪.

#include <stdio.h>

void function(int *********anInt)
{
    *********anInt = 5;
}

int main()
{
    int n = 0;
    int *p1 = &n;
    int **p2 = &p1;
    int ***p3 = &p2;
    int ****p4 = &p3;
    int *****p5 = &p4;
    int ******p6 = &p5;
    int *******p7 = &p6;
    int ********p8 = &p7;
    function(&p8);
    printf("%d\n", n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


Ser*_* L. 7

尝试

int main() {
    int *********nbr;

            nbr = malloc(sizeof(int********));
           *nbr = malloc(sizeof(int*******));
          **nbr = malloc(sizeof(int******));
         ***nbr = malloc(sizeof(int*****));
        ****nbr = malloc(sizeof(int****));
       *****nbr = malloc(sizeof(int***));
      ******nbr = malloc(sizeof(int**));
     *******nbr = malloc(sizeof(int*));
    ********nbr = malloc(sizeof(int));
    function(nbr);
    printf("%d", *********nbr);
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 5

你需要一个荒谬的主程序来配合地狱的任务!

int main(void)
{
    int         l0 = 0;
    int        *l1 = &l0;
    int       **l2 = &l1;
    int      ***l3 = &l2;
    int     ****l4 = &l3;
    int    *****l5 = &l4;
    int   ******l6 = &l5;
    int  *******l7 = &l6;
    int ********l8 = &l7;

    printf("%d %d %d %d %d %d %d %d %d\n", l0, *l1, **l2, ***l3, ****l4, *****l5,
           ******l6, *******l7, ********l8);
    function(&l8);
    printf("%d %d %d %d %d %d %d %d %d\n", l0, *l1, **l2, ***l3, ****l4, *****l5,
           ******l6, *******l7, ********l8);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

未经测试:也许我没有把事情算作正确,但总体思路是正确的.这是一个酷刑测试 - 对于无辜的C程序员和编译器.

  • 我想其中一些`*`应该是那些声明中的`&`. (3认同)