2017-12-02 168 views
-2

如何使用list()在C中创建列表?不是一个链表,只是一个常规的元素列表。我来自python,我可以使用list = []。但是,当我在Google“C列表”中唯一出现的是链接列表。看来有一个函数列表(),我假设创建一个列表。我无法弄清楚如何提取第一和第二值:如何使用list()在C中创建一个列表? (试图保存和从列表中提取元素)

int L = list(1,2,3,4,5); 
    int a = L[0]; 
    int b = L[1]; 

我需要在C列表存储两个值,一个分子(n)和分母(d)。我正在创建一个分数计算器,我希望n和d是存储在分数(列表)中的两个值。我不想写f1 =(n1,d1)到fk =(nk,dk)的程序。

+0

C未列表。如果你想[链表](https://en.wikipedia.org/wiki/Linked_list)你需要对它们进行编码(使用包含指针的堆'struct') –

回答

1

我看到2个问题有:

  1. 如何使用数据结构来存储非原子型可变
  2. 如何创建这样的结构的一个(同质)阵列。

Python列表没有直接的等价物,因为C无法在任意长度的货架上存储异构数据类型。你可能需要一些更深层次的背景阅读,但这里的一些示例代码,这可能有助于:

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

// Define a structure type, no builtin tuples 
typedef struct { 
    int n; 
    int d; 
} Fraction; 


int main(int argc, char **argv) { 
    int i; 
    int N = 5; 
    Fraction f0 = {2, 3}; // Directly create & initialize data 
    Fraction *fractions; // variable length ponter to array of Fractions 


    // Using dynamic allocation of arrays 
    fractions = (Fraction *) malloc(N*sizeof(Fraction)); 
    fractions[0] = f0;     
    fractions[1] = (Fraction) {5, 7}; // This needs to be explicitly casted to Fraction type 
    fractions[2] = (Fraction) {11, 13}; 
    fractions[3] = (Fraction) {17, 19}; 
    fractions[4] = (Fraction) {23, 29}; 


    printf ("Fraction0 -> numerator: %d, denominator: %d\n", f0.n, f0.d); 

    for (i=1; i < N; i++) { 
     printf ("Fractions[%d] -> numerator: %d, denominator: %d\n", i, fractions[i].n, fractions[i].d); 
    } 
} 

这应该打印:

Fraction0 - >分子:2,分母:3个

分数[ 1] - >分子:5,分母:7个

级分[2] - >分子:11,分母:13

级分[3] - >分子:17,分母:19个

级分[4] - >分子:23,分母:29

+0

这更接近我想要完成的事情。我试图扫描分子和分母。谢谢你的帮助。 –

+0

还有一个问题:如果我试图使用scanf给n和d一个值,我该怎么做?我曾尝试使用&(f-> Fraction.n),&Fraction.n,Fraction.n,并简单地&n但没有任何工作。 –

+0

不客气。尝试:'scanf(“%d%d”,&f0.n,&f0.d);'。如果你使用“f”作为数组/指针,那么它就像'f = &f0; scanf(“%d%d “,&(f-> n),&(f-> d));'只要记住首先将”f“赋值给一个已分配的结构,否则就会发生段错误。 – clocker

1

C中没有这样一个列表。list不在C标准库中,所以我不确定你在哪里找到了。在C中,你通常会使用一个数组。

int L[] = {1,2,3,4,5}; 
int a = L[0]; 
int b = L[1]; 
+0

谢谢。事实证明,如果我把()放在它后面,Sublime Text颜色就会编码一个单词。我认为它会识别它,因为它会显示为相同的颜色,所以它会显示int或结构体。 –

+0

@ DanO'Connell没问题。如果其中一个答案解决了您的问题,请确保接受它。 –

0

在C中的等效将是元件的阵列:

int x[10]; 

int秒的阵列及其大小= 10

初始化C中的阵列可以以几种进行例如:

int x[10] = {0,1,2,3,4,5,6,7,8,9}; 
int x[] = {0,1,2,3,4,5,6,7,8,9}; 

或者您可以分配单个元素:

int x[10]; 
x[0] = 0; 
x[1] = 1; 
. 
. 
x[9] = 9; 

您应该阅读更多关于数组以及它们如何在c中工作的内容。

相关问题