答案是yes

srand改变了全局变量,所以在任何地方调用一次都会影响后续的rand返回值

C标准给了一个sample implementation,如下(http://stackoverflow.com/questions/4768180/rand-implementation,

http://stackoverflow.com/questions/7343833/srand-why-call-only-once)

static unsigned long int next = 1;int rand(void) // RAND_MAX assumed to be 32767
{next = next * 1103515245 + 12345;return (unsigned int)(next/65536) % 32768;
}void srand(unsigned int seed)
{next = seed;
}

由这个代码应该可以比较清楚地看到:next是个全局变量,每次调用srand都会修改next,而每次调用rand都要首先读取这个值,并且修改这个值。也就是说,srand对next的修改——对rand来说——是可见的

一个小测试:

#include <stdio.h>
#include <stdlib.h>void print_rand()
{for (int i = 0; i < 5; i++) {printf("%d,", rand());}printf("\n");
}int main(int argc, const char *argv[])
{srand(123);for (int i = 0; i < 5; i++) {printf("%d,", rand());}srand(123);//观察注释后的结果,对比
    print_rand();return 0;
}

注释前结果:440,19053,23075,13104,32363,440,19053,23075,13104,32363,

注释后结果:440,19053,23075,13104,32363,3265,30749,32678,9760,28064,

测试也验证了我们的推断

转载于:https://www.cnblogs.com/fstang/archive/2013/05/11/3072856.html

在main中调用srand是否影响子函数中的rand()的返回值?相关推荐

  1. 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)

    第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...

  2. 二级指针在子函数中申请内存的两种方式

    二级指针:在主函数中申明变量,在子函数中分配内存,有两种方式返回二级指针.在这个过程只有深刻理解了C的函数调用模型,以及指针的内存模型,才能够掌握好. #pragma once #include &l ...

  3. C语言在子函数中调用malloc申请内存的方法【转】

    (转自:https://blog.csdn.net/HuffieWang/article/details/51744043) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  4. 嵌入式FreeRTOS系统,在中断中调用FreeRTOS系统的API函数

    作为在中断中调用FreeRTOS系统的API函数的参考,disp_str()是显示屏的显示函数会将传入的字符串进行显示. void TIM5_Int_Init(u16 arr,u16 psc) {TI ...

  5. python中调用什么模块的什么函数来实现求实数平方根_python语言基础与应用答案...

    python语言基础与应用答案 python3不再区分整数和长整数,统一为()类型. python可以使用(____)函数打开文件,这个函数默认的打开模式为(____). a=[3]alist=[1, ...

  6. 如何在智能合约中调用另一个合约的函数

    智能合约是在区块链中被执行的一段程序,因为它们在区块链上执行,所以不依赖于任何的中心化服务器.目前最主流的智能合约编程语言是 Solidity. 在以太坊区块链中,智能合约可以和其他已经部署的智能合约 ...

  7. 习题 8.21 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。

    C程序设计(第四版) 谭浩强 习题8.21 个人设计 习题 8.21 用指向指针的指针的方法对n个整数排序并输出.要求将排序单独写成一个函数.n个整数在主函数中输入,最后在主函数中输出. 代码块: 方 ...

  8. 反射 -- 业务需求:执行某个类中全部的以test为开头的无参数无返回值的非静态方法。...

    package demo; //业务需求:执行某个类中全部的以test为开头的无参数无返回值的非静态方法. import java.lang.reflect.Method; import java.u ...

  9. Pytorch中tensor维度和torch.max()函数中dim参数的理解

    Pytorch中tensor维度和torch.max()函数中dim参数的理解 维度 参考了 https://blog.csdn.net/qq_41375609/article/details/106 ...

最新文章

  1. 他676分考上清华却没微信,看到他的手机后大家沉默了
  2. 因时而动 顺势而为——广告人独家专访快友股份CEO林森
  3. 开源的悲哀——袁萌100天变身实录[2]
  4. CJOJ 2171 火车站开饭店(树型动态规划)
  5. 循环神经网络LSTM RNN回归:sin曲线预测
  6. 网友调侃特斯拉股价要冲向火星 马斯克:疯狂的时代
  7. android系统面试问答_Android面试问答
  8. 不定期更新的IDEA功能整理
  9. webpack全局安装和安装过程中碰见的一些坑(npm error)解决方案
  10. php 导出csv格式的文件
  11. 测试tf卡读写速度软件,U盘测速图文教程,优盘读写速度测试,移动硬盘TF卡SD内存卡测速...
  12. 2022年茶艺师(初级)考试试题及在线模拟考试
  13. 2021SC@SDUSC Zxing开源代码(八)Data Matrix二维码(一)
  14. Echarts16 ---散点图-趋势图
  15. 计算机房摆放布局,数据中心机房位置及设备布置的几点要求
  16. RocketMQ的长轮询消费方式
  17. 记一个eclipse快捷键Alt+Shift+L
  18. 【华为OD机试模拟题】用 C++ 实现 - 预订酒店(2023.Q1)
  19. Docker buil提示https://registry-1.docker.io/v2/: read tcp 10.221->:443: read: connection reset by peer
  20. api有哪些 javasocket_Java Socket编程以及与Linux Socket API关系

热门文章

  1. Android自定义控件ImageViwe(四)——多点触控实现图片的自由移动
  2. Mr.J--Vue之v-cloak
  3. centos部署时间服务器
  4. nRF52832 BLE_DFU空中升级OTA(一)安装软件(SDK14.2.0)
  5. srm开发(基于ssh)(4)
  6. 安装pypcap = 安装flex:the fast lexical analyser + 安装libpcap-1.7.4
  7. 按钮3D分层悬停效果
  8. [Vue.js] 基础 -- 安装Vue
  9. axios学习笔记(二):轻松弄懂XHR的使用及如何封装简易axios
  10. 定义css设备类型-Media Queries