VitaLemon_Tee 2022-01-18 14:38 采纳率: 100%
浏览 42
已结题

一些C语言运行的问题

一些c语言基础知识,运行之后结果不理解。

  1. void main()
    {
         int a[5];
         int i;
         int *p[5];
                                                 
         for(i = 0; i < 5; i++)
         {
                 int b[5] = {1,2,3,4,5};
                 p[i] = &b[i];
                 printf("p is %d\n",*p[i]);
         }
         memset(a,0,sizeof(a));
         for(i=0;i<5;i++)
         {
                 printf("p[%d] is %d\n",i,*p[i]);
         }
    }
    
    结果:
    p is 1
    p is 2
    p is 3
    p is 4
    p is 5
    p[0] is 0
    p[1] is 0
    p[2] is 0
    p[3] is 0
    p[4] is 0
    
    为什么memset a,结果p也变成0了?
    将memset注释掉,后面打印的就是
    p[0] is 1
    p[1] is 2
    p[2] is 3
    p[3] is 4
    p[4] is 5
    

2.

void func(char *num)
{
        *num = 10; 
}

int main(int argc, char *argv[])
{
        int inc=0;                                                              
        func((char*)&inc);
        printf("inc is %d\n", inc);
        return 0;
}

运行结果
inc is 32522
为什么不初始化inc, 结果会变成32522. 如果说因为没初始化不知道数值是多少,后面func操作不是赋值了吗?
如果初始化inc = 0, 打印出来的就是10了

  • 写回答

4条回答 默认 最新

  • 於黾 2022-01-18 15:05
    关注

    1.跟你memset没有关系,你去掉也一样
    因为b是在循环里定义的,出了循环,它就释放了,p就指向一个随机内存了
    2.c语言不检查变量是否初始化
    int inc会给它分配一个内存,如果你不把它赋值成0,那么这内存里的值不知道是之前运行什么程序时留下来的,大体可以看做是个随机数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 修改了问题 1月18日
  • 修改了问题 1月18日
  • 展开全部

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效