C语言怎么定义一个数组

生活 2019-02-28 07:32:14 391

本文收集整理关于C语言怎么定义一个数组的相关议题,使用内容导航快速到达。

内容导航:

  • Q1:C语言中一维数组正确的定义
  • Q2:c语言中如何定义一个返回数组的函数?
  • Q3:C语言如何定义一组长度不定的数组?
  • Q4:C语言结构体数组的定义
  • Q5:C语言怎么宏定义一个2维数组
  • Q6:怎么用C语言定义一个无限长的数组?
  • Q7:C语言 如何定义字符串数组
  • Q1:C语言中一维数组正确的定义

    符号常量是用一个标识符来表示一个常量,一维数组的定义方法为:类型说明符+数组名+[常量表达式];

    类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数组元素的个数或者长度,可以是常量或符号常量,不能为变量。

    例如:

    1、int x[8]; 表示定义一个整型数组x,数组长度为8.

    2、float a[8],b[10];表示定义一个实型数组b,数组长度为8,一个实型数组c,数组长度为10

    3、 ch[15]; 表示定义一个字符数组ch,数组长度为15。

    扩展资料

    在程序中可以使用下标变量,即说明这些变量的整体为数组,数组中的每个变量的数据类型是相同的。当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。

    一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。一维数组是计算机程序中最基本的数组。二维及多维数组可以看作是一维数组的多次叠加产生的。

    数组是计算机编程中的重要概念,运用数组可以方便地处理大规模的数据。

    Q2:c语言中如何定义一个返回数组的函数?

    数组不可以直接返回,只能通过参数传递出来,比如:
    void fun(int* p);
    int main()
    {
    int a[100];
    fun(a);
    return 0;
    }
    希望能帮助你。

    Q3:C语言如何定义一组长度不定的数组?

    C语言中实现变长数组有几种方式:1.柔性数组 2.动态分配内存

    1.使用柔性数组的话就是在结构体中定义一个长度为0的数组:

    struct MyData {int nLen;char data[0];};数组的长度为0就表明数组占用的长度只有一个数组名,当要使用的时候就可以直接分配制定长度的空间,使用完之后释放即可。

    int nLen = 100;MyData *myData = https://www.yijitao.com/aldyjtapi/(MyData*)malloc(sizeof(MyData) + 100);

    再对这个数组进行其他操作,操作完了之后free掉分配的空间。

    2.使用动态分配的方式,和1差不多,只不过要先定义一个指针用来保存分配好的内存空间的其实地址,分配好之后,这个指针就可以当作数组来使用,你要分配多少都是可以变化的,操作完成之后同样要进行释放。

    char *p;

    p=(char *)malloc(100);

    //对p进行操作

    free(p);

    如果你的变化的长度是来自其他计算公式或者函数也可以,可以另外定义一个函数,函数的返回值可以是结构体或者指针,而参数就是这个变化的长度。

    char* TEST(int len){

    char *p;p=(char *)malloc(len);return p;

    }

    调用:char *a = TEST(获取长度的其他函数);

    Q4:C语言结构体数组的定义

    结构数组就是具有相同结构类型的变量集合。

    假如要定义一个班级40个同学的姓名、性别、年龄和住址,可以定义成一个结构数组。如下所示:

    struct{
    charname[8];
    charsex[2];
    intage;
    charaddr[40];
    }student[40];

    也可定义为:

    structstring{
    charname[8];
    charsex[2];
    intage;
    charaddr[40];
    };
    structstringstudent[40];

    需要指出的是结构数组成员的访问是以数组元素为结构变量的,其形式为:

    结构数组元素.成员名

    例如:

    student[0].name
    student[30].age

    实际上结构数组相当于一个二维构造,第一维是结构数组元素,每个元素是

    一个结构变量,第二维是结构成员。

    注意: 结构数组的成员也可以是数组变量。

    例如:

    structa
    {
    intm[3][5];
    floatf;
    chars[20];
    }y[4];

    为了访问结构a中结构变量y[2]的这个变量,可写成

    y[2].m[1][4]

    Q5:C语言怎么宏定义一个2维数组

    1、例如:
    #define M 80
    #define N 100
    #define ARRAY(A,M,N) A[M][N]
    char ARRAY;
    2、宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译
    宏定义又称为宏代换、宏替换,简称“宏”。
    格式:
    #define 标识符 字符串
    其中的标识符就是所谓的符号常量,也称为“宏名”。
    预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
    掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。即在对相关命令或语句的含义和功能作具体分析之前就要换。

    Q6:怎么用C语言定义一个无限长的数组?

    C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。

    比如int a[] = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。

    但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。

    1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。

    通过下面例子来理解该方法:

    12345678910111213141516171819202122232425262728#include#includeintmain(){intsize=100;//最初为100个元素空间。int*a=NULL;inti=0;a=malloc(sizeof(int)*size);if(a==NULL)return-1;while(scanf("%d",a+i)==1)//循环向a中输入数据,直到输入非数值字符为止{i++;if(i==size)//数组空间不足{size*=2;//将数组空间扩大二倍,也可以改用size+=100;之类的操作,使size每次增加固定值。a=realloc(a,size);//分配新的空间if(a==NULL){return-1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。}}}if(a)free(a);//对申请的内存进行释放。return0;}

    从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。

    如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。

    所以这种方法可以做到软件意义上的无限大数组空间。

    但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。

    2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。

    Q7:C语言 如何定义字符串数组

    方法1,使用指针数组:
    #include
    #include
    #include
    intmain()
    {
    char*test[]={ "thisisatest ","test2 "," "};
    inti=0;
    while(strcmp(test[i]," ")!=0)
    puts(test[i++]);
    system( "PAUSE ");
    return0;
    }
    这个方法比较简单, 但是问题是这样的话,字符串是常量,无法修改。当然这个问题也可以解决, 比如使用数组赋值, 然后将char 数组首地址赋值给某一个指针即可。
    方法2,使用2维数组:#include
    #include
    #include
    intmain()
    {
    chartest[][20]={ "thisisatest ","test2 "," "};
    inti=0;
    while(strcmp(test[i]," ")!=0)
    puts(test[i++]);
    system( "PAUSE ");
    return0;
    }
    这样的话, 问题就是空间的浪费!

    相关文章
    c语言字符串输出一部分2019-01-22
    c语言怎么生成exe文件2019-01-27
    c语言十进制转十六进制2019-02-13
    c语言定义多个结构体2019-02-17
    c语言输入数字变成字母2019-02-19
    设置c语言中字体颜色2019-02-20
    c语言逻辑运算符优先级2019-02-21
    C语言最大值最小值编程2019-02-22
    c语言打开文件怎么输入2019-02-25
    c语言 数组和指针区别2019-02-26