用C创建一个数组

时间:2016-06-16 03:25:20

标签: c arrays

我是编程新手,过去几个月我一直在学习C语言。

我正在研究一个在数组中存储整数对的程序。程序提示用户输入要输入的对数,然后我需要为数组分配存储,然后用户逐行输入对以存储在数组中。程序需要访问这些对以便稍后执行操作。

我无法尝试设置它。如何创建这种数据集,其中每个成员包含一对整数,而不知道数组的初始大小?

2 个答案:

答案 0 :(得分:1)

C中没有对动态数组的内置支持。您需要的类型是指向您的对的指针,这些指针将根据用户选择进行分配。

我已经从您的描述中编写了一个简单的示例代码,以帮助您理解动态分配。

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

struct MyPair
{
    int first;
    int second;
};

int main()
{
    int nPairCount=0;
    struct MyPair *pPairs = NULL;

    // .... prompt from the user
    // let's say we have a nPairCount>0
    // We allocate a memory space in the heap that will be able to store
    // nPairCount pairs contiguously. 
    pPairs = malloc(nPairCount*sizeof(struct MyPair));
    if(pPairs == NULL)
    {
        // LOG ERROR, THERE IS NOT ENOUGH MEMORY TO ALLOCATE YOUR PAIRS
        return -1;
    }

    for(int i= 0; i<nPairCount; ++i)
    {
        // you can access the i-th pair in memory thanks to [] operator
        // Fill the currentPair
        // pPairs[i].first = ... ;
        // pPairs[i].second= ... ;

    }

    // Do your process

    // Do not forget to free your pairs from memory
    free(pPairs);

    return 0;
}

答案 1 :(得分:0)

我认为c中没有可用的存储桶功能。但是您可以创建一个具有用户输入的元素数量的数组。

#include<stdio.h>
int main(){
int a,i;
printf("Enter the number of pairs: ");
scanf("%d",&a);

double b[a*2];\\note that a is number of pairs, so 2a will make it elements
printf("Enter the numbers: \n");
for(i=0;i<(2*a-1);i=i+2)
{
    scanf("%lf %lf",&b[i],&b[i+1]);
}
printf("The pairs entered by you are:\n ");
for(i=0;i<(2*a-1);i=i+2)
{
    printf("%lf and %lf\n ",b[i],b[i+1]);
}


return 0;
}

我所做的就是一次占用2个元素并为它们分配连续的数组,然后成对打印它们。

示例输出: 输入对数:3

输入数字:

12 14

45 456

321 568

您输入的对是:

12.000000和14.000000

45.000000和456.000000

321.000000和568.000000