我正在学习C语言的指针,我试着写了一个这样的程序。
#include <stdio.h>
#include <stdlib.h>
int* getValue(int length)
{
int *value,*index,data;
value = malloc(length*sizeof(int));
index = value;
while(length>0){
scanf("%d", &data);
*index = data;
index++;
length--;
}
return (value);
}
int total(int length, int *data)
{
int *index,sum,i;
index = data;
sum =0;
for(i=0;i<length;i++){
sum+= *index;
index++;
}
return (sum);
}
int main()
{
int i,j,ptrLength,num,sum,*lengthPtr,*lengthIndex,**ptr,**ptrIndex;
lengthPtr = malloc(3*sizeof(int));
lengthIndex = lengthPtr;
ptr = malloc(3*sizeof(int *));
ptrIndex = ptr;
for(i=0;i<3;i++){
printf("Enter the length and the value:");
scanf("%d",ptrLength);
*lengthIndex = ptrLength;
lengthIndex++;
*ptrIndex = getValue(ptrLength);
ptrIndex++;
}
printf("Enter which one you want to calculate:");
scanf("%d",&num);
sum = total(lengthPtr[num-1], ptr[num-1]);
printf("The sum is %d",sum);
free(lengthPtr);
free(ptr);
return (0);
}
尝试分配两个数组来存放数组的大小和值。这段代码可以编译,但没有显示出我所想的东西(应该打印出其中一个数组的和)。但我不知道我哪部分做错了......。谁能帮帮我?
我在你的代码中做了一些修改,我用运算符在数组(int*)上迭代。subscribt []
(返回对数组中n位置元素的引用),我修正了一些错误。
你必须检查malloc在分配过程中是否成功或失败! 你有内存泄漏,因为你没有释放数组中的 array(int**)
你刚刚释放了指针!
#include <stdio.h>
#include <stdlib.h>
int* getValue(int length)
{
int *value,*index,data;
value = malloc(length*sizeof(int));
if(value==NULL){
printf("malloc failed!");
return NULL;
}
for(int i=0 ;i<length; i++){
scanf("%d", &data);
value[i]=data;
}
return value;
}
int total(int length, int *data)
{
int sum,i;
sum =0;
for(i=0;i<length;i++){
sum+= data[i];
}
return (sum);
}
int main()
{
int i,num,sum;
int *Lengths =(int *)malloc(3*sizeof(int));
if(Lengths==NULL){
printf("malloc failed!");
return 1;
}
int **Arrays = (int **)malloc(3*sizeof(int *));
if(Arrays==NULL){
printf("malloc failed!");
return 1;
}
for(int i=0;i<3;i++){
printf("Enter the Array length: ");
scanf("%d",&Lengths[i]);
printf("Fill the array with values: ");
Arrays[i] = getValue(Lengths[i]);
}
printf("Enter which one you want to calculate:");
scanf("%d",&num);
sum = total(Lengths[num-1], Arrays[num-1]);
printf("The sum is %d",sum);
free(Lengths);
for(int i=0; i<3;i++)
free(Arrays[i]);
free(Arrays);
}
唯一的问题是 scanf
你需要把它存储在某个地址。
scanf("%d",&ptrLength);