gpt4 book ai didi

C打印 double 类型指针值不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 08:45:38 26 4
gpt4 key购买 nike

我需要制作一个简单的程序来制作新数组,该数组由第一个数组中的 sqrt-ed 元素组成。我必须在 main 中编写新数组的元素。我尝试调试我的代码,变量 xy 显示了良好的数字(我初始化它们只是为了我可以在调试器上观察进度),但是当我尝试编写我的新数组的元素,它显示了一些奇怪的数字。一些善良的灵魂可以解释我做错了什么吗?

void returnSqrtArrayt(int* myArray, int length, double** newArray)
{
int i;
double x, y;
double* p;
double* arraySqrt=(double*)malloc(length*sizeof(double));
for(i=0;i<length;i++)
{
x=*myArray;
*arraySqrt=sqrt(x);
y=*arraySqrt;
myArray++;
arraySqrt++;
}

*newArray=arraySqrt;

p=arraySqrt;

for(i=0;i<length;i++)
{
printf("%e\n",*p);
p++;
}
printf("\n");
}

void main()
{
int myArray[5]={4,2,16,4,81};
int length=sizeof(myArray)/sizeof(int);
int i;
double* newArray;

returnSqrtArrayt(myArray, length, &newArray);

for(i=0;i<length;i++)
{
printf("%e\n",*newArray);
newArray++;
}
}

最佳答案

您遇到的是未定义的行为,因为您所做的是:

void returnSqrtArrayt(int* myArray, int length, double** newArray)
{
...
double* arraySqrt= malloc(...); // create new array

for(i=0;i<length;i++)
{
...
arraySqrt++; // increment pointer to this array
}

*newArray=arraySqrt; // use incremented pointer

// any use of *newArray or arraySqrt here tries to access incorrect memory !
}
最好使用临时指针 p 进行打印,因为递增 p 不会影响原始指针,但请尝试以下更改:
  • *newArray=arraySqrt;malloc 调用后立即执行
  • 在函数内部打印时使用 p=*newArray; 而不是 p=arraySqrt;

关于C打印 double 类型指针值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com