我有一段C代码,我不明白该sizeof(...)函数是如何工作的:
#include <stdio.h>
int main(){
const char firstname[] = "bobby";
const char* lastname = "eraserhead";
printf("%lu\n", sizeof(firstname) + sizeof(lastname));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,sizeof(firstname)是6,sizeof(lastname)是8.
但bobby宽5个字符,宽eraserhead11个.我期待16.
为什么sizeof对于字符数组和指向字符的指针表现不同?
任何人都可以澄清吗?
想象一下单词的字母.
例:
a ==> 1
b ==> 2
c ==> 3
z ==> 26
ab ==> 27
ac ==> 28
az ==> 51
bc ==> 52
and so on.
Run Code Online (Sandbox Code Playgroud)
这样字符序列只需要按升序排列(ab有效但ba不是).给定任何单词如果有效则打印其索引,否则打印0.
Input Output
ab 27
ba 0
aez 441
Run Code Online (Sandbox Code Playgroud)
在这个问题中,我可以轻松地做数学,但我没有得到任何算法.
我在数学方面所做的是
一封信26
两封信325
.
.
.
等等
#include <iostream>
struct Foo
{
Foo(int d) : x(d) {}
int x;
};
int main()
{
double x = 3.14;
Foo f( int(x) );
std::cout << f.x << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译此代码时,我收到以下错误:
[错误]请求'f'中的成员'x',这是非类型'Foo(int)'
假设在int main我删除int的Foo f(int(x)).我的意思是如果我这样写:
Foo f(x);
Run Code Online (Sandbox Code Playgroud)
代码编译正确,输出为3.
那么如果我们输入类似Foo f(int(x))的参数来调用构造函数会发生什么呢?
#include<stdio.h>
int main()
{
printf("%d\n", 4 ?: 8);
}
Run Code Online (Sandbox Code Playgroud)
根据C标准,这个程序是无效的,因为它缺少?和:.之间的表达式.但有趣的是,当我编译它正在打印的代码时.如果4它会打印4而不是显示任何编译错误
给定一个数字,我们必须找到下一个最高数字和前一个数字,它们的二进制表示中具有相同数量的1位
我的解决方案是一种强力方法,即增加数量并计算1的数量,如果它具有相同数量的1然后打印它
以前的数字与上述方法相同
是否有任何优化的解决方案而不是检查所有数字?
例如,通过分支跳转语句和正常循环来编写循环之间的区别是什么
main()
{
int i=0;
while(i<9)
{
//do something
i++;
}
Run Code Online (Sandbox Code Playgroud)
和
main()
{
int i=0;
label:
//do something
i++;
if(i<9)
goto label;
}
Run Code Online (Sandbox Code Playgroud)
两者的表现是否相等?