有什么区别:
int myArray[5];
Run Code Online (Sandbox Code Playgroud)
和
int* myArray = new int[5];
Run Code Online (Sandbox Code Playgroud) 如果我在Visual C++ 2017中构建并运行以下程序:
#include <stdio.h>
int main()
{
int a[3] = { 0 };
for (int i = 0; i < 3; i++)
{
printf("%llu %u %p\n", a + i, a + i, a + i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我看到输出如下:
31519768560270096 7338768 000F1055
31519785740139284 7338772 000F1055
31519802920008472 7338776 000F1055
Run Code Online (Sandbox Code Playgroud)
我无法联想到.
为什么输出%llu如此不同?sizeof(int)在我的平台上是4.
为什么输出%p都相同?它们是不同变量的地址.
只有输出%u似乎是一致的 - 3个数组元素的连续内存位置,每个数组元素有4个字节.但这些输出既不匹配%llu也不匹配%p.
我在GNU GCC编译器上尝试了以下代码,并将其输出为26.但是我不明白代码是如何工作的,尤其是strlen()函数实际上正在做什么.
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char b[]={'G','E','E','K','S',' ','F','O','R',' ','F','U','N'};
cout<<sizeof(b)<<endl;
cout<<strlen(b)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想显示"字符串指针受影响"但我收到错误.这是我的代码:
#include<stdio.h>
main()
{
char* *p;
char * s="string pointer affected";
*p=s;
printf("%s",*p);
}
Run Code Online (Sandbox Code Playgroud) 在书中我找到了这个C++代码:
int main()
{
int i, j, caseNo = 1, x[20], y[20];
...
}
Run Code Online (Sandbox Code Playgroud)
我测试这部分代码并得到以下结果:
我从未见过这样的代码,所以我的问题是:这个语法意味着什么?
我有这样的程序.
?#include<stdio.h>
#include<stdlib.h>
int main(int i) { /* i will start from value 1 */
if(i<10)
printf("\n%d",main(++i)); /* printing the values until i becomes 9 */
}
output :
5
2
2
2
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释输出是怎么来的?每次迭代都返回main(++ i).如果我删除printf函数中的\n,它也会产生输出5111.提前致谢.
最近我在直接调用析构函数中发现了一个奇怪的行为,即值得一提的 IMU。
考虑下面的简单代码:
#include <iostream>
class S {
public:
S() = default;
~S() { i=10; }
int i{100};
};
int main()
{
S s;
do {
std::cout << "Before foo: " << s.i;
s.~S();
std::cout << "; After: " << s.i << std::endl;
} while (false);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
跑步:
$g++ -O3 ./d.cpp -o d
$./d
Before foo: 100; After: 0
$g++ -O0 ./d.cpp -o d
$./d
Before foo: 100; After: 10
Run Code Online (Sandbox Code Playgroud)
IMU:这非常令人困惑。由于某种原因,对析构函数的直接调用似乎被优化掉了,即被忽略了。为什么?
我试图向 gcc 社区呼吁,但对他们的回复感到非常惊讶:gcc-bug-103843
他们无法理解案件,推诿和开玩笑,使环境适得其反,我不准备继续下去。
我做了一些额外的调查:
#include …Run Code Online (Sandbox Code Playgroud)