草庐IT

c++ - C/C++ 中单个参数(函数)中的多个参数

好吧,这个标题听起来可能有点含糊,但那是因为我不知道如何用不同的方式来表达它。我将尝试解释我的意思:在某些库中,'init'函数经常接受一些参数,但该参数随后接受多个参数(正确..)。一个例子,就像这样:apiHeader.h#defineAPI_FULLSCREEN0x10003003#defineAPI_NO_DELAY0x10003004#defineAPI_BLAH_BLAH0x10003005主.c:apiInit(0,10,10,2,API_FULLSCREEN|API_NO_DELAY|API_BLAH_BLAH);这是如何运作的?我无法在任何地方找到答案,很可能是因为我

c++ - 为什么 scanf 似乎跳过了输入?

我对以下程序中scanf的行为感到困惑。scanf似乎输入了一次,然后不再输入,直到打印出字符流。下面是一个C程序#includeintmain(){inti,j=0;do{++j;scanf("%d",&i);printf("\n\n%d%d\n\n",i,j);}while((i!=8)&&(j在这里,Tilliaminputinganyintegerprogramworksperfectlyfine,但是当输入一个字符时,它会继续打印i的最后输入值并且永远不会停止(直到循环退出时j为10)以便scanf接受下一个输入.output::1同样的事情也在C++中发生。#include

c++ - _r 后缀是什么意思?

我知道_r后缀用于表示线程安全的东西。例如strtok和strtok_r或libmysql.so和libmysql_r.so。但我在任何地方都找不到这到底意味着什么?例如,_t表示“类型”,_r后缀是什么意思? 最佳答案 请参阅http://pubs.opengroup.org/onlinepubs/000095399/xrat/xbd_chap04.html中的A.4.16线程安全章:Thesuffix"_r"ishistorical,wherethe'r'stoodfor"reentrant".

c++ - 将 A[i][j] 更改为 A[j][i] 时,遍历矩阵的速度变慢

这个问题在这里已经有了答案:c++2darrayaccessspeedchangesbasedon[a][b]order?[duplicate](5个答案)关闭9年前。我有一个名为A的int矩阵,当我按列而不是行迭代它时,它的运行速度慢了大约50毫秒:for(inti=0;i有谁知道为什么会这样?我问过几个人,但他们都不知道为什么。我确信这与地址在计算机内存中的表示方式有关,但我仍然想找到更具体的答案。

c++ - 将一个结构转换为另一个

我正在尝试将一个struct转换为另一个。但是我在编译时不断收到这个错误:conversiontonon-scalartyperequested我得到这一行的错误:p是一个结构前缀,我需要将它转换为结构prefix_ipv4get_info(type,(structprefix_ipv4)p);代码:ospf_external_info_delete(u_chartype,structprefix_ipv4p){///////////////}structprefix_ipv4{u_charfamily;u_charprefixlen;structin_addrprefix__attr

c++ - 为什么sizeof()编译器返回的值是依赖的?

structA{charc;doubled;}a;mingw32-gcc.exe中的:sizeofa=16在gcc4.6.3(ubuntu)中:sizeofa=12为什么它们不同?我认为应该是16,gcc4.6.3是否做了一些优化? 最佳答案 如果需要,编译器可能会为目标体系结构执行数据结构对齐。这样做可能纯粹是为了提高应用程序的运行时性能,或者在某些情况下是处理器需要的(即,如果数据未对齐,则程序将无法运行)。例如,大多数(但不是全部)SSE2指令要求数据在16字节边界上对齐。简而言之,计算机内存中的所有内容都有一个地址。假设我们

c++ - 常量的哪个属性使其不可更改?

今天我遇到了一个面试,其中一个问题对我来说非常棘手。面试官说“如何让常量能够改变它的值?”我回答“使用指针”并给他看了一个例子:intmain(void){constinta=3;int*ptr;ptr=(int*)(&a);printf("A=%d\n",a);*ptr=5;printf("A=%d\n",a);return0;}但他说这很好。但是告诉我哪个是使常数不变的属性?他还说,有一个属性我们可以改变并使常量可变。有这样的属性(property)吗?它是如何工作的? 最佳答案 如果他说这很好,那他就错了:试图修改常量对象会导

c++ - 将 float 转换为 int,有和没有转换

这两个是等价的吗?floatf=3.14;inti;i=f;//3和floatf=3.14;inti;i=(int)f;//3 最佳答案 编译器处理这两种情况的方式没有区别。生成的机器代码将是相同的。但是,第一种是隐式转换,第二种是显式转换。根据编译器标志,您可能会在执行丢失精度的隐式转换时收到警告。旁注,文字3.14的类型为double,这意味着语句floatf=3.14中也可能存在精度损失>。一种干净的方法是编写floatf=3.14f指定这是float类型的值3.14。 关于c++

c++ - 递归函数的内存分配

调用递归函数时内存是如何分配的?一个函数有它自己分配的内存。当它被调用时,参数(不是引用传递的参数)和变量获得内存。那么,当从函数体内再次调用该函数时,如何将内存分配给第二次调用的变量和参数? 最佳答案 递归函数与任何其他函数没有什么不同——自动局部变量通过将堆栈指针推进到足够远以说明它们的大小总和(加上对齐所需的任何填充)而作为单个block分配。每个递归调用都会以这种方式压入一个新的堆栈帧,然后在返回时将其弹出。如果递归未能达到基本情况,堆栈将迅速耗尽,导致同名的StackOverflow崩溃。

java - codechef 和 spoj 问题中使用模 10^9+7 的意义是什么?

我正在研究aproblem这需要输出为“对于每一行输出答案模10^9+7”。为什么问题中包含模10^9+7?它有什么意义?我不是在寻找问题的解决方案;只有那个特定常数的重要性。 最佳答案 问题要求结果取模素数,因为备选方案,即要求给出“高阶位”的浮点结果和要求整个结果,并不总是问题设置者正在寻找的。这些问题通常是“发现并实现重复”的问题。低位通常会告诉你你发现的递归是否正确。对于“高阶位”问题可能有一个特殊的技巧,也许是基于一个聪明的解析近似。人们不经常询问整个结果的原因是这需要参赛者进行大数运算。问题制定者通常不希望因为“错误的原