我想知道我们是否可以在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) 可能重复:
为什么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
我试图理解位域的概念.但我无法找到CASE III中以下结构的大小为8字节的原因.
struct B
{
unsigned char c; // +8 bits
} b;
Run Code Online (Sandbox Code Playgroud)
的sizeof(B); //输出:1(因为unsigned char在我的系统上占用1个字节)
struct B
{
unsigned b: 1;
} b;
sizeof(b); // Output: 4 (because unsigned takes 4 bytes on my system)
Run Code Online (Sandbox Code Playgroud)
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.
我对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) 我在我的项目中使用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).
但是,问题是源的长度可能不同,我不知道如何为每个变长字符串编写正确的格式说明符.