C 在以指针为参数的函数中操作指针值

C 在以指针为参数的函数中操作指针值,c,function,pointers,C,Function,Pointers,我已经读了很多关于stackoverflow的问题,但是找不到任何解决方案来解决函数中指针的分配和操作问题:有人能告诉我这段代码有什么问题吗?(我想通过pointerpass为*D分配值,并通过pointerprint打印) #包括 #包括 浮动*D; 无效指针通道(浮动**ptr1) { *ptr1=(浮动*)malloc(3*sizeof(浮动)); *(ptr1+0)=1.33; *(ptr1+1)=2.33; *(ptr1+2)=3.33; } 无效指针打印(浮动**ptr2) { in

我已经读了很多关于stackoverflow的问题,但是找不到任何解决方案来解决函数中指针的分配和操作问题:有人能告诉我这段代码有什么问题吗?(我想通过pointerpass为*D分配值,并通过pointerprint打印)

#包括
#包括
浮动*D;
无效指针通道(浮动**ptr1)
{
*ptr1=(浮动*)malloc(3*sizeof(浮动));
*(ptr1+0)=1.33;
*(ptr1+1)=2.33;
*(ptr1+2)=3.33;
}
无效指针打印(浮动**ptr2)
{
int j=0;
对于(j=0;j
void pointerpass(float**ptr1){
*ptr1=(浮动*)malloc(3*sizeof(浮动));
(*ptr1)[0]=1.33;
(*ptr1)[1]=2.33;
(*ptr1)[2]=3.33;
}
无效指针打印(浮动**ptr2){
int j=0;
对于(j=0;j我们开始

#include<stdio.h>
#include<stdlib.h>

float * pointerpass(){
   float *ret = malloc(3*sizeof(float));
   ret[0] = 1.33f;
   ret[1] = 2.33f;
   ret[2] = 3.33f;
   return ret;
}
void pointerprint(float *array) {
    int j=0;
    for (j=0;j<3;j++) {
        printf("\n%f\n",array[j]);
    }
}

int main() {
   float *x = pointerpass();
   pointerprint(x);
   free(x); // We do not like memory leaks
   return 0;
}
#包括
#包括
float*pointerpass(){
float*ret=malloc(3*sizeof(float));
ret[0]=1.33f;
ret[1]=2.33f;
ret[2]=3.33f;
返回ret;
}
无效指针打印(浮点*数组){
int j=0;

对于(j=0;jp)请缩进代码-即使其可读,以及您为什么要让生活变得如此困难。您可以在C中传回
malloc
]的结果,
*ptr1=(float*)malloc(float*)3*sizeof(float));
-the
(float*)
强制转换是多余的。而且,
a[b]
相当于
*(a+b)
。另外,不要强制转换
malloc
的结果。编程语言可以精确表示。@重复数据消除程序为什么不能强制转换malloc?@user3748848,没问题,只是简单地纠正大小写就可以了。但强制转换错误通常是人为错误​​. 即使这样做也不是必需的。好吧,这不是一个需要夸张的足够解释的代码。;我终于明白了!!非常感谢。
void pointerpass(float **ptr1){
    *ptr1=(float*)malloc(3*sizeof(float));
    (*ptr1)[0]=1.33;
    (*ptr1)[1]=2.33;
    (*ptr1)[2]=3.33;
}
void pointerprint(float **ptr2){
    int j=0;
    for (j=0;j<3;j++)
        printf("\n%f\n", (*ptr2)[j]);
}
#include<stdio.h>
#include<stdlib.h>

float * pointerpass(){
   float *ret = malloc(3*sizeof(float));
   ret[0] = 1.33f;
   ret[1] = 2.33f;
   ret[2] = 3.33f;
   return ret;
}
void pointerprint(float *array) {
    int j=0;
    for (j=0;j<3;j++) {
        printf("\n%f\n",array[j]);
    }
}

int main() {
   float *x = pointerpass();
   pointerprint(x);
   free(x); // We do not like memory leaks
   return 0;
}