遵循两个代码片段哪个更快?为什么?
在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) #include<stdio.h>
void main()
{
int n = 2;
printf("%c",&n);
}
Run Code Online (Sandbox Code Playgroud)
输出:L
在使用%d它当然给出了变量的地址,n但为什么在使用时输出L %c?
根据这个问题,sizeof(true)或者sizeof(false)是4字节,因为true它false是宏并在#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 ? …
我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类型成员没有填充?
编写带有多个||的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)
这似乎不起作用......
我有一小段代码使用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)
那么,我的代码有什么问题?
考虑到,我已将变量名称声明为带下划线的数字.
#include <stdio.h>
int main()
{
char _3 = 'c';
printf("%c\n",_3);
}
Run Code Online (Sandbox Code Playgroud)
我想知道,它在C和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中看到了以下例子(作者: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)
为什么两个输出不同?书中没有解释.
在以下代码中,函数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)
memset在const阵列上使用是合法的吗?