如何用指针变量打印double浮点数组?求助解决代码问题
问题解决:指针打印double数组及代码修复
首先明确:你注释里的指针打印double数组逻辑本身没问题,但代码存在致命前置错误导致功能失效,同时内积计算也有bug,下面逐一修复:
1. 最核心错误:变长数组声明时机错误
你在main里先声明了y[n]和z[n],但此时n还未通过scanf赋值,属于未初始化的垃圾值,这会导致数组大小非法,后续所有数组读写(包括指针遍历)都是未定义行为。
修复方法:把数组声明移到scanf("%d", &n);之后:
int main(void){ int n, p; double *e; // 先仅声明指针 printf("输入数组长度:\n"); scanf("%d", &n); double y[n],z[n]; // n已赋值,再声明合法的变长数组 // ... 后续代码不变 }
2. 指针打印double数组的正确写法
修正数组声明后,你注释里的遍历逻辑就能正常工作,整理成可用版本:
// 写法1:用&y[0]作为起始指针 printf("你输入的第一个数组是:"); for(e = &y[0]; e < &y[n]; e++){ printf(" %lf", *e); } printf("\n"); // 写法2:直接用数组名(数组名等价于首元素指针) printf("你输入的第二个数组是:\n"); for(e = z; e < z + n; e++){ printf("%lf\n", *e); }
和int数组的指针遍历逻辑完全一致,唯一区别是格式符用%lf(对应double类型),而int用%d。
3. 内积函数的两个bug修复
- sum未初始化:
double sum;需改为double sum = 0.0;,否则sum初始为垃圾值,计算结果完全错误。 - 循环条件错误:
pointerb < a + len应改为pointerb < b + len,或者更简洁的方式——只判断pointera的范围即可(两个数组长度相同,同步遍历):
for(pointera = a, pointerb = b; pointera < a + len; pointera++, pointerb++){ sum += *pointera * *pointerb; printf("当前位置乘积:%lf,累计和:%lf\n", *pointera * *pointerb, sum); }
完整修复后的代码
#include <stdio.h> double inner_product(const double *a, const double *b, int n); int main(void){ int n, p; double *e; printf("输入数组长度:\n"); scanf("%d", &n); double y[n],z[n]; printf("输入第一个数组:\n"); for(p = 0; p < n; p++){ scanf("%lf", &y[p]); } // 指针方式打印第一个数组 printf("你输入的第一个数组是:"); for(e = &y[0]; e < &y[n]; e++){ printf(" %lf", *e); } printf("\n"); printf("\n输入第二个数组:\n"); for(p = 0; p < n; p++){ scanf("%lf", &z[p]); } // 指针方式打印第二个数组 printf("你输入的第二个数组是:\n"); for(e = z; e < z + n; e++){ printf("%lf\n", *e); } printf("\n内积结果是:%lf \n", inner_product(y,z,n)); return 0; } double inner_product(const double *a, const double *b, int len){ const double *pointera, *pointerb; double sum = 0.0; // 初始化sum为0 for(pointera = a, pointerb = b; pointera < a + len; pointera++, pointerb++){ sum += *pointera * *pointerb; printf("当前位置乘积:%lf,累计和:%lf\n", *pointera * *pointerb, sum); } return sum; }
额外说明
你提到用float替换n出现错误,这是因为数组长度必须是整数类型(int),float类型无法用来指定数组大小,这个尝试本身不合法。
内容的提问来源于stack exchange,提问作者KwesiM
相关产品推荐
相关产品推荐

