铭凡 发表于 2023-6-17 11:46:48

第09节 复杂的数据类型3 提问

视频源码如下
#include <iostream>

int main(int argc, const char *argv[], const char *envp[])
{
    int a = 123;
    float b = 3.14;
    char c = 'C';
    unsigned long d = 19880808;
    std::string e = "I love FishC! ";

    std::cout << "a的值是: " << a << std::endl;
    std::cout << "b的值是: " << b << std::endl;
    std::cout << "c的值是: " << c << std::endl;
    std::cout << "d的值是: " << d << std::endl;
    std::cout << "e的值是: " << e << std::endl;

    int *ap = &a;
    float *bp = &b;
    char *cp = &c;
    unsigned long *dp;
    std::string *ep = &e;

    *ap = 456;
    *bp = 4.13;
    *cp = 'F';
    *dp = 20230617;
    *ep = "I love Beauty! ";

    std::cout << "a的值是: " << a << std::endl;
    std::cout << "b的值是: " << b << std::endl;
    std::cout << "c的值是: " << c << std::endl;
    std::cout << "d的值是: " << d << std::endl;
    std::cout << "e的值是: " << e << std::endl;

    return 0;
}

视频中运行结果是:


但是我编译之后的却是:
PS D:\Desktop\Others\Programming\C Language\网上教学\小甲鱼C++\第09节 复杂的数据类型3> g++ test01.cpp -o test
PS D:\Desktop\Others\Programming\C Language\网上教学\小甲鱼C++\第09节 复杂的数据类型3> ./test
a的值是: 123
b的值是: 3.14
c的值是: C
d的值是: 19880808
e的值是: I love FishC!
PS D:\Desktop\Others\Programming\C Language\网上教学\小甲鱼C++\第09节 复杂的数据类型3>

我觉得吧,代码是没问题,就是它只显示之前的部分,后边的就不输出了,难道是编译器的事?

sfqxx 发表于 2023-6-17 11:58:57

根据您提供的代码和结果,可以看出程序编译和运行都没有报错,但是输出结果只有第一部分。

问题很可能出在指针变量`dp`上,它在定义时并未被初始化,因此其初始值是不确定的。在后面程序中,将赋值操作`*dp = 20230617;`应该导致了程序崩溃或出现未定义行为。

解决这个问题,可以在定义`dp`时给它一个初始值,例如:

unsigned long *dp = nullptr;

表示`dp`指向空地址,或者让`dp`指向一个已存在的`unsigned long`变量。修改之后重新编译和运行程序,应该可以得到正确的输出结果。

求最佳答案{:10_254:}

铭凡 发表于 2023-6-17 12:54:55

sfqxx 发表于 2023-6-17 11:58
根据您提供的代码和结果,可以看出程序编译和运行都没有报错,但是输出结果只有第一部分。

问题很可能出 ...

解决了,谢谢

sfqxx 发表于 2023-6-17 12:56:34

铭凡 发表于 2023-6-17 12:54
解决了,谢谢

不客气{:10_279:}
页: [1]
查看完整版本: 第09节 复杂的数据类型3 提问