作为一个练习,我有一个奇怪的问题:
编写一个函数,该函数将指针的指针的指针指针指向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)
但我得到一个段错误,我只是了解malloc
和pointers
,所以我不完全理解.
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)
尝试
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)
你需要一个荒谬的主程序来配合地狱的任务!
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程序员和编译器.