小编use*_*292的帖子

我们可以有递归宏吗?

我想知道我们是否可以在C/C++中使用递归宏?如果是,请提供示例.

第二件事:为什么我无法执行以下代码?我在做什么错?是因为递归宏吗?

# define pr(n) ((n==1)? 1 : pr(n-1))
void main ()
{
    int a=5;
    cout<<"result: "<< pr(5) <<endl;
    getch();
}
Run Code Online (Sandbox Code Playgroud)

c c++ macros c-preprocessor

50
推荐指数
4
解决办法
4万
查看次数

增量运算符不使用sizeof

可能重复:
为什么sizeof(x ++)不能递增x?

只是想知道为什么增量运算符不能在下面的代码片段中工作:

    int main()
    {
        int a = 10;
        int b = sizeof(a++);
        cout<<"a: "<<a<<endl;
        cout<<"b: "<<b<<endl;
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出 -

a:10

b:4

c++ operators sizeof

8
推荐指数
2
解决办法
622
查看次数

包含位字段的结构的大小

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

我试图理解位域的概念.但我无法找到CASE III中以下结构的大小为8字节的原因.

案例I:

struct B    
{
    unsigned char c;  // +8 bits
} b;
Run Code Online (Sandbox Code Playgroud)

的sizeof(B); //输出:1(因为unsigned char在我的系统上占用1个字节)

案例II:

struct B
{
    unsigned b: 1;
} b;

 sizeof(b); // Output: 4 (because unsigned takes 4 bytes on my system)
Run Code Online (Sandbox Code Playgroud)

案例III:

struct B
{
    unsigned char c;  // +8 bits
    unsigned b: 1;    // +1 bit
} b;

sizeof(b); // Output: 8 
Run Code Online (Sandbox Code Playgroud)

我不明白为什么案例III的输出为8.我期待1(char)+ 4(无符号)= 5.

c c++ sizeof bit-fields structure-packing

5
推荐指数
1
解决办法
1万
查看次数

何时在 C++ 中使用结构而不是类

可能的重复:
什么时候应该在 C++ 中使用类和结构?

在使用 C++ 编写程序时,何时应该使用 STRUCT 声明而不是 CLASS 声明?

  1. 绝不 !!?
  2. 任何事情......让你感觉更好的那个?

c++ oop struct class

1
推荐指数
2
解决办法
2470
查看次数

make_heap()函数如何工作?

我对Vectors和迭代器有基本的了解.但是我在理解下面代码片段的输出方面遇到了问题.

具体来说,我无法找到make_heap()函数的功能.它是如何产出的:91 67 41 24 59 32 23 13 !!

根据我的知识,堆将如下所示:

        91
       /  \
     67    41
    /  \  /  \
   59 24 32  23
  /
 13
Run Code Online (Sandbox Code Playgroud)

所以,我期待输出为:91 67 41 59 24 32 23 13

如果有人能帮助我理解make_heap()如何生成这样的输出,我将非常感激.

int main()
{
int aI[] = { 13, 67, 32, 24, 59, 41, 23, 91 };
vector<int> v(aI, aI + 8);

make_heap( v.begin(), v.end() );

vector<int>::iterator it;
for( it = v.begin(); it != v.end(); ++it )
    cout << *it << " ";
//Output: 91  67 …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector

1
推荐指数
1
解决办法
1839
查看次数

如何在运行时更改格式说明符的值?

我在我的项目中使用sscanf将字符串从源缓冲区复制到目标缓冲区.例如:

char* target;
target = (char*)malloc(100 * sizeof(char));
char* source = "Hello World";
sscanf(source, "%[^\t\n]", target); // trying to copy "Hello World" into target.
printf("%s\n", target);//this will print "Hello World".
Run Code Online (Sandbox Code Playgroud)

但是这种编码风格的方式是不被接受的.我的经理要我做的是:

sscanf(source, "%11[^\t\n]", target); // NOTE: I've written "%11". here, 11 == length of hello world.
Run Code Online (Sandbox Code Playgroud)

这意味着,他希望我也提供格式说明符.(在这种情况下为%11).

但是,问题是源的长度可能不同,我不知道如何为每个变长字符串编写正确的格式说明符.

c c++ scanf format-specifiers

1
推荐指数
1
解决办法
709
查看次数