eyys666 发表于 2020-7-27 17:27:31

这段代码怎么理解

#include <stdio.h>

void plus()
{
      while(1)
      {
                printf("执行了!!\n");
      }
      
}

int fun()
{
      int rarry;
      rarry = (int) &plus;
      return 0;
}

void main()
{
      fun();
      getchar();
      return;
}

风过无痕1989 发表于 2020-7-27 17:38:50

你这个死循环了,因为 while(1) 永远都是符合条件的

风过无痕1989 发表于 2020-7-27 17:48:26

原意是要在主程序中调用 fun 函数,将 plus 的地址放到 rarry 数组中去,由于死循环了,什么都看不到了

风过无痕1989 发表于 2020-7-27 17:59:59

加一句:break; 试一下

#include <stdio.h>

void plus()
{
      while(1)
      {
                printf("执行了!!\n");
                                break;
      }
      
}

int fun()
{
      int rarry;
      rarry = (int) &plus;
      return 0;
}

void main()
{
      fun();
      getchar();
      return;
}

livcui 发表于 2020-7-27 19:27:49

本帖最后由 livcui 于 2020-7-27 19:28 编辑

#include <stdio.h>

void plus()
{
    while (1)
    {
      printf("执行了!!\n");      // 死循环???
    }

}

int fun()
{
    int rarry;       // 总共有9个元素,用第11个就超缓冲区了
    rarry = (int)&plus      // 函数地址的地址?
    return 0;
}

void main()
{
    fun();
    getchar();
    return;
}错了好多
没懂你要干什么,就改成这样吧
#include <stdio.h>

void plus()
{
    int i = 1;
    while (i--)
    {
      printf("执行了!!\n");
    }

}

int fun()
{
    int rarry;      
    rarry = (int)&plus
    return 0;
}

void main()
{
    fun();
    getchar();
    return;
}





405794672 发表于 2020-7-27 20:32:45

第一个函数,无限循环打印
第二个函数,定义一个数组,长度为9
                  第10号元素,即该数组第11个数的位置填充为第一个函数的地址转化成的整型数
               返回
开始:
调用第二个函数
从输入区得到一个字符
返回

正常情况,数组溢出是无法进行。最多溢出一位。当然,可能这C就真能直接用而不检查
那么就会正常编译。
如果编译成功,那么,函数就填了一个地址进去,然后啥也不干
另外,编译器也可能检查到数组没有被赋值而罢工不干。

SHRS23 发表于 2020-7-27 22:45:04

这段代码没有任何意义,不需要理解

乐乐学编程 发表于 2020-9-26 01:29:47

快两个月了,还没理解吗?帮你顶上去,让大家帮你
页: [1]
查看完整版本: 这段代码怎么理解