Mitty2023 发表于 2023-3-28 23:07:53

想问问这个该怎么改?

#include<stdio.h>
int main()
{        long double atoms=("35473 11825 1 -0.8476 8.663546789038294 15.898504696069216 9.592882300061233 0 0 0","587870 18076 3 2 10.5800345647899458 17.167260923545656768799038 9.24859747003637 0 0 0","13711 4571 1 -0.8476 12.38993400496225 15.7343547658895299 9.308990371654799 0 0 1");
        long double *p;
        p=atoms;
        p=atoms;
        printf("p=%ld",*(p+12));
        return 0;
}
说是无效初始化,还有赋值类型不兼容

isdkz 发表于 2023-3-28 23:21:20

首先,你需要知道数组的初始化语法和指针赋值的方式。以下是修改后的代码:

#include<stdio.h>

int main() {
    long double atoms = {
      {35473, 11825, 1, -0.8476, 8.663546789038294, 15.898504696069216, 9.592882300061233, 0, 0},
      {587870, 18076, 3, 2, 10.5800345647899458, 17.167260923545656768799038, 9.24859747003637, 0, 0},
      {13711, 4571, 1, -0.8476, 12.38993400496225, 15.7343547658895299, 9.308990371654799, 0, 0}
    };

    long double (*p);
    p = atoms;
    printf("p=%Lf", *(*(p+0)+12));

    return 0;
}


修改点如下:


[*]修复数组初始化语法。数组应该使用大括号 {} 来初始化,而不是使用双引号。
[*]将数组大小从 改为 。根据提供的数据,数组的大小应为 3 行 9 列。
[*]修改指针类型。将 long double *p 更改为 long double (*p)。因为你要让 p 指向二维数组,所以需要将其类型修改为指向大小为9的一维数组的指针。
[*]删除 p=atoms; 这行代码,因为类型不匹配。atoms 是一个 long double 类型的值,而不是一个指针。我们已经在 p = atoms; 这行代码中正确设置了 p 的值。
[*]修改 printf 语句中的格式说明符。将 %ld 改为 %Lf,因为你要打印的是 long double 类型的值,而不是 long 类型的值。
页: [1]
查看完整版本: 想问问这个该怎么改?