为什么此打印内存地址而不是值

时间:2019-10-30 19:34:02

标签: c++ arrays matrix-multiplication

这是我的司机

int square[2][2] = {
    {1,2},
    {3,4}
};

matrixMulti(square, 2);

这是我的功能

void matrixMulti(const int a[][2], const int rows) {

    int b[2][2];

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            for (int k = 0; k < 2; k++) {
                b[i][j] += a[i][k] * a[k][j];
            }
        }
    }

    cout << "new matrix " << endl;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            cout << b[i][j] << " ";
        }
        cout << endl;
    }
}

输出为:

new matrix
-858993453 -858993450
-858993445 -858993438

我对为什么打印内存地址而不是打印存储在其中的值感到困惑,如何使打印它打印值而不是打印内存地址。

2 个答案:

答案 0 :(得分:4)

您写道:

int b[2][2];

然后

b[i][j] += ...

您在哪里初始化b?

int b[2][2] = {};

int b[2][2] = {0,0};

应该做这项工作。

答案 1 :(得分:2)

正在打印垃圾值,而不是数组地址。 这就是为什么。 在这段代码中

spring.datasource.tomcat.driver-class-name=com.simba.athena.jdbc42.Driver
spring.datasource.tomcat.url=jdbc:awsathena://AwsRegion=eu-west-1;AwsCredentialsProviderClass=com.amazonaws.auth.DefaultAWSCredentialsProviderChain;S3OutputLocation=s3://xxx/;
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

您为void matrixMulti(const int a[][2], const int rows) { int b[2][2]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { b[i][j] += a[i][k] * a[k][j]; } } } 分配了空间,但是没有将其初始化为一个值。除非在for循环主体中,否则会很好。 int b[2][2] <=> b[i][j] += a[i][k] * a[k][j]; 您正在初始化b[i][j] = b[i][j] + a[i][k] * a[k][j];的值。换句话说,您说b[i][j]等于b[i][j],但是您不能这样做,因为b[i][j] + a[i][k] * a[k][j]的值是未知的。

解决方案是初始化b[i][j]