鱼C论坛

 找回密码
 立即注册
查看: 1665|回复: 1

[已解决]想问问这个该怎么改?

[复制链接]
发表于 2023-3-28 23:07:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{        long double atoms[3][82]=("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[0][0];
        printf("p=%ld",*(p+12));
        return 0;
}
说是无效初始化,还有赋值类型不兼容
最佳答案
2023-3-28 23:21:20
首先,你需要知道数组的初始化语法和指针赋值的方式。以下是修改后的代码:
#include<stdio.h>

int main() {
    long double atoms[3][9] = {
        {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)[9];
    p = atoms;
    printf("p=%Lf", *(*(p+0)+12));

    return 0;
}


修改点如下:

  • 修复数组初始化语法。数组应该使用大括号 {} 来初始化,而不是使用双引号。
  • 将数组大小从 [3][82] 改为 [3][9]。根据提供的数据,数组的大小应为 3 行 9 列。
  • 修改指针类型。将 long double *p 更改为 long double (*p)[9]。因为你要让 p 指向二维数组,所以需要将其类型修改为指向大小为9的一维数组的指针。
  • 删除 p=atoms[0][0]; 这行代码,因为类型不匹配。atoms[0][0] 是一个 long double 类型的值,而不是一个指针。我们已经在 p = atoms; 这行代码中正确设置了 p 的值。
  • 修改 printf 语句中的格式说明符。将 %ld 改为 %Lf,因为你要打印的是 long double 类型的值,而不是 long 类型的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-28 23:21:20 | 显示全部楼层    本楼为最佳答案   
首先,你需要知道数组的初始化语法和指针赋值的方式。以下是修改后的代码:
#include<stdio.h>

int main() {
    long double atoms[3][9] = {
        {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)[9];
    p = atoms;
    printf("p=%Lf", *(*(p+0)+12));

    return 0;
}


修改点如下:

  • 修复数组初始化语法。数组应该使用大括号 {} 来初始化,而不是使用双引号。
  • 将数组大小从 [3][82] 改为 [3][9]。根据提供的数据,数组的大小应为 3 行 9 列。
  • 修改指针类型。将 long double *p 更改为 long double (*p)[9]。因为你要让 p 指向二维数组,所以需要将其类型修改为指向大小为9的一维数组的指针。
  • 删除 p=atoms[0][0]; 这行代码,因为类型不匹配。atoms[0][0] 是一个 long double 类型的值,而不是一个指针。我们已经在 p = atoms; 这行代码中正确设置了 p 的值。
  • 修改 printf 语句中的格式说明符。将 %ld 改为 %Lf,因为你要打印的是 long double 类型的值,而不是 long 类型的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 23:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表