小编msc*_*msc的帖子

用于C/C++中的循环变量优化

遵循两个代码片段哪个更快?为什么?

for语句外声明循环索引变量:

size_t i = 0;
for (i = 0; i < 10; i++) 
{

}
Run Code Online (Sandbox Code Playgroud)

for语句中声明的循环索引变量:

for (size_t i = 0; i < 10; i++) 
{

}
Run Code Online (Sandbox Code Playgroud)

c c++ optimization for-loop

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

试图理解printf带有char说明符的指针(%c)

#include<stdio.h>
void main()
{
   int n = 2;
   printf("%c",&n);
}
Run Code Online (Sandbox Code Playgroud)

输出:L

在使用%d它当然给出了变量的地址,n但为什么在使用时输出L %c

c format-specifiers

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

为什么sizeof(a?true:false,a)运算符打印一个字节?

根据这个问题,sizeof(true)或者sizeof(false)4字节,因为truefalse是宏并在#include <stdbool.h>头文件中定义.

但是,这里有趣的程序输出.

#include <stdio.h>
#include <stdbool.h>

int main() 
{
    bool a = true;
    printf("%zu\n", sizeof(a ? true : false, a));
                             /* ^^ -> expresion2 */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(现场演示):

1
Run Code Online (Sandbox Code Playgroud)

C11 6.5.15条件运算符(P4):

第一个操作数被评估; 在其评估与第二或第三操作数的评估之间存在一个序列点(以评估者为准).仅当第一个操作数不等于0时才评估第二个操作数; 仅当第一个操作数比较等于0时才评估第三个操作数; 结果是第二个或第三个操作数的值(无论哪个被评估),转换为下面描述的类型.110)

这里a是一个bool类型和赋值true,然后在sizeof运算符内,运算conditional符执行expression2因为a是a true.

因此,comma运算符部分(表达式3)未根据标准进行评估,而表达式2是宏.所以,根据那个问题,宏的输出是4字节,但在这里,程序的输出是1字节.

那么,为什么 只sizeof(a ? …

c boolean sizeof comma conditional-operator

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

为什么结构中只有"char"类型的成员没有填充?

char在结构中只声明了类型成员.

#include <stdio.h>

struct st
{
    char c1;
    char c2;
    char c3;
    char c4;
    char c5;
};

int main() {
    struct st s;
    printf("%zu\n", sizeof(s));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出: [ 现场演示 ]

5
Run Code Online (Sandbox Code Playgroud)

那么,为什么结构中只有char类型成员没有填充?

c gcc structure padding char

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

如何用多个||编写if语句 和&&在C?

编写带有多个||的if语句的简洁方法是什么 和&&在C?

我想只执行一个printf语句,如果1,2,4或6 AND b = 8和c = 10,我可以将所有这些条件放在同一个if语句中吗?

例如.我可以这样写:

if ((a = 1||2||4||6) && b == 8 && c == 10)

//do something
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用......

c if-statement multiple-conditions

-2
推荐指数
1
解决办法
4万
查看次数

如何在C++ 17中使用std :: min_element?

我有一小段代码使用std :: min_element打印范围内的最小元素.cppreference示例打印最小元素的索引,但我想打印最小元素而不是索引号.

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{3, 1, 4, 1, -5, 9};
    std::cout << std::min_element(std::begin(v), std::end(v));
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到了一个错误:

main.cpp: In function 'int main()':
main.cpp:8:15: error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and '__gnu_cxx::__normal_iterator<int*, std::vector<int> >')
     std::cout << std::min_element(std::begin(v), std::end(v));
Run Code Online (Sandbox Code Playgroud)

那么,我的代码有什么问题?

c++ min c++17

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

`char _3 ='c'`在C和C++中有效吗?

考虑到,我已将变量名称声明为带下划线的数字.

#include <stdio.h>

int main()
{
   char _3 = 'c';
   printf("%c\n",_3);
}
Run Code Online (Sandbox Code Playgroud)

我想知道,它在C和C++中运行良好.那么,它有效吗?

c c++ variables identifier

-2
推荐指数
2
解决办法
294
查看次数

是"返回i ++,i,i ++;" C中的未定义行为?

如果我这样写:

i = i++, i, i++;
Run Code Online (Sandbox Code Playgroud)

它是C语言中未定义的行为.

但是,如果我这样写:

return i++, i, i++; // Is it UB?
Run Code Online (Sandbox Code Playgroud)

是不确定的行为?

例:

#include <stdio.h>

int f(int i)
{
    return i++, i, i++; // Is it UB?
}
int main() {
    int i = 1;
    i = i++, i, i++;

    i = f(i);
    printf("%d\n",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c undefined-behavior language-lawyer c11

-2
推荐指数
2
解决办法
243
查看次数

为什么sizeof()运算符在C中的输出不同

我在测试你的c中看到了以下例子(作者:Yashvant Kanetkar).

在下面的示例中,sizeof()给出输出8.

#include<stdio.h>

double d;

int main()
{
(int)(float)(char)d;
printf("%d\n",sizeof(d));
}
Run Code Online (Sandbox Code Playgroud)

但在第二个例子中,sizeof()给出了输出4.

#include<stdio.h>

double d;

int main()
{
printf("%d\n",sizeof((int)(float)(char)d));
}
Run Code Online (Sandbox Code Playgroud)

为什么两个输出不同?书中没有解释.

c casting sizeof

-4
推荐指数
1
解决办法
113
查看次数

在`const`数组上使用memset()函数是否合法?

在以下代码中,函数const清除数组的元素memset.

#include <stdio.h>
#include <string.h>

int main() {
    const int a[3] = {1, 2, 3};
    memset(a, 0, sizeof(a));
    printf("%d %d %d\n",a[0],a[1],a[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

memsetconst阵列上使用是合法的吗?

c arrays const memset

-4
推荐指数
1
解决办法
367
查看次数