相关疑难解决方法(0)

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

在printf中输出变量地址

如果我在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.

c pointers

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

当我们没有用null字符显式初始化字符数组时,字符串的长度是多少?

我在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)

c++

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

指针/解除引用错误

我想显示"字符串指针受影响"但我收到错误.这是我的代码:

#include<stdio.h>

main()
{
  char* *p;

  char * s="string pointer affected";

  *p=s;

  printf("%s",*p);
}
Run Code Online (Sandbox Code Playgroud)

c

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

不寻常的 C++ 语法

在书中我找到了这个C++代码:

int main()
{
    int i, j, caseNo = 1, x[20], y[20];

    ...
}

Run Code Online (Sandbox Code Playgroud)

我测试这部分代码并得到以下结果:

  • 我 = 0;
  • j - 随机数
  • 案例编号 = 1
  • x[20] - 每次具有相同值的数组
  • y[20] - 具有随机值的数组

我从未见过这样的代码,所以我的问题是:这个语法意味着什么?

c++ syntax

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

什么main(++ i)将在C中返回

我有这样的程序.

?#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.提前致谢.

c program-entry-point return

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

直接析构函数调用已优化

最近我在直接调用析构函数中发现了一个奇怪的行为,即值得一提的 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)

c++ gcc destructor

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

标签 统计

c++ ×4

c ×3

destructor ×1

gcc ×1

pointers ×1

program-entry-point ×1

return ×1

syntax ×1