精华内容
下载资源
问答
  • 复合字面量

    2020-09-24 14:48:43
    C99新增了复合字面量(compound literal)。字面量是除符号常量外的常量。例如,5是int类型字面量,81.3是double类型的字面量,'Y’是char类型的字面量,"elephant"是字符串字面量。 对于数组,复合字面量类似数组...

    给带int形参的函数传递一个值,可以传递一个int类型的变量,也可以是一个in类型的常量,例如5。
    对于带数组形参的函数,在C99标准以前,可以传递数组,但没有等价的数组常量。
    C99新增了复合字面量(compound literal)。字面量是除符号常量外的常量。例如,5是int类型字面量,81.3是double类型的字面量,'Y’是char类型的字面量,"elephant"是字符串字面量。
    对于数组,复合字面量类似数组初始化,前面是用括号括起来的类型名。
    例如,下面是个普通的数组声明:

    int diva[2]=[10.20]; //声明数组
    

    下面的复合字面量创建了一个与diva数组相同的匿名数组:

    (int [2]){10,20};  //复合字面量
    

    注意,去掉声明中的数组名,留下的int [2]即是复合字面量的类型名。
    初始化有数组名的数组时可以省略数组大小,复合字面量也可以省略大小,编译器会自动计算数组当前的元素个数:

    (int []){50, 20, 90} // 内含3个元素的复合字面量
    

    使用复合字面量

    因为复合字面量是匿名的,所以不能先创建然后再使用它,必须在创建的同时使用它。
    使用指针记录地址就是一种用法。也就是说,可以这样用:

    int * pt1;
    pt1 = (int [2]) {10, 20};
    

    注意,该复合字面量的字面常量与上面创建的 diva 数组的字面常量完全相同。与有数组名的数组类似,**复合字面量的类型名也代表首元素的地址,所以可以把它赋给指向int的指针。然后便可使用这个指针。**例如,本例中*pt1是10,pt1[1]是20。

    还可以把复合字面量作为实际参数传递给带有匹配形式参数的函数:

    int sum(const int ar[], int n);
    ...
    int total3;
    total3 = sum((int []){4,4,4,5,5,5}, 6);
    

    这种用法的好处是,把信息传入函数前不必先创建数组,这是复合字面量的典型用法。可以把这种用法应用于二维数组或多维数组。

    int (*pt2)[4];   // 声明一个指向二维数组的指针,该数组内含2个数组
    元素,
    // 每个元素是内含4个int类型值的数组
    pt2 = (int [2][4]) { {1,2,3,-9}, {4,5,6,-8} };
    

    如上所示,该复合字面量的类型是int [2][4],即一个2×4的int数组。

    注意:记住,复合字面量是提供只临时需要的值的一种手段。复合字面量具有块作用域(第12章将介绍相关内容),这意味着一旦离开定义复合字面量的块,程序将无法保证该字面量是否存在。也就是说,复合字面量的定义在最内层的花括号中。
    只有支持C99的编译器才能正常使用复合字面量。

    展开全文
  • c语言复合字面量

    千次阅读 2018-05-29 21:29:02
    C99新增了复合字面量,字面是除符号常量外的常量,声明格式如下:(int [2]){10,20}即去掉声明中的数组名,留下的int [2]即使复合字面量的类型名,初始化有数组名的数组时可以省略数组的大小,复合字面量也可以,...

    C99新增了复合字面量,字面是除符号常量外的常量,声明格式如下:

    (int [2]){10,20}

    即去掉声明中的数组名,留下的int [2]即使复合字面量的类型名,初始化有数组名的数组时可以省略数组的大小,

    复合字面量也可以,编译器会自动计算数组的大小。由于复合字面量是匿名的所以不能先创建然后在使用它,必须在创建

    的同时使用它。如:

    int *pt1;

    pt1=(int[2]){10,20};

    复合字面量是提供只临时需要的值的一种手段。


    展开全文
  • C语言复合字面量

    2018-07-08 17:10:02
    / * C99增加的特性,复合字面量(composite literal)。一旦熟悉并使用,便会体会到简洁强大的表达对,复合字面量,就是可以随时定义,随时赋值的数组字面量。两步构建出来。形如(type [])表示需要构建的数组类型...
    
    / * 
    
    C99增加的特性,复合字面量(composite literal)。一旦熟悉并使用,便会体会到简洁强大的表达


    对,复合字面量,就是可以随时定义,随时赋值的数组字面量。两步构建出来。


    形如(type [])表示需要构建的数组类型,如:(int []),(int * p),还能是自定义的类型(MyType [])
    2。跟着{}表示数组内容




    * /

    https://blog.csdn.net/c1194758555/article/details/80897459


    #include <stdio.h>


    typedef struct TEST {
        int a;
        int b;
        char str [64];
    } st_TEST,* pst_TEST;




    void showPst(pst_TEST pst_test)
    {
        if(NULL == pst_test){
            return;
        }
        
        printf(“%d \ n”,pst_test-> a);
        的printf( “%d \ n”个,pst_test-> b)的
        的printf( “%S \ n \ n”个,pst_test-> STR);
    }
    空隙showArry(INT * ARRY,INT NUM)
    {
        对于(INT I = 0;我<NUM;我++){
            的printf( “%d \ n”个,ARRY [I]);
        }
        printf(“\ n”);
    }




    static st_TEST myTest = {
            。a = 0,
            .b = 1,
            .str =“song”
    };  


    static int * pst =(int *)&(int []){0,1,2,3,4,5};




    int main(void)
    {     


        / *常规写法* /  
        showPst(&myTest); 
        //复合字面量写法
        showPst(&(st_TEST){。a = 2,.b = 3,.str =“song2”});




        / *常规写法* /
        int myArry [5] = {1,3,5,7,9};
        showArry(myArry,5);


        //复合字面量写法
        showArry((int [5]){2,4,6,8,10},5);


        showArry(PST,5);
        




    }
    展开全文
  • 复合字面量的意义?我直接声明一个数组不也一样的吗?
  • 4.复合字面量

    千次阅读 2020-07-02 16:51:59
    复合自变量类似于数组初始化列表,前面是用括号括起来的类型名 int arr[2] = {1, 2} 用复合自变量表示方法如下 (int [2]) {1, 2} //复合自变量 有两个int类型值的匿名数组 ...复合字面量是匿名的,所.
    1. 复合字面量类似于数组初始化列表,前面是用括号括起来的类型名
      int arr[2] = {1, 2}
      用复合自变量表示方法如下
      (int [2]) {1, 2} //复合字面量
      有两个int类型值的匿名数组
      这里int[2] 是复合字面量的类型,初始化有数组名的数组可以省略数组大小,复合字面量也可以省略大小,
      int a[2] = {1, 2} <==> int a[] = {1, 2}
      (int [2]){1, 2} <==> (int []){1, 2}

    复合字面量是匿名的,所以不可以创建后再使用,只能在创建的时候使用,使用指针记录地址是一种方法,

    int *ptr;
    ptr = (int [2]){1, 2}
    

    复合字面量的类型名也表示首元素的地址
    所以 *ptr = 1 ptr[1] = 2
    复合字面量还可以作为实参传递给匹配类型的形参

    int sum(int a[], int n)
    
    int total
    total = sum((buf[4]){1, 2, 3, 4}, 4);
    
    1. 二维数组的复合字面量表示方法
    int (*ptr)[4]	//ptr是一个指针,他指向一个内含4个int类型值得数组,假设这个数组有两个元素,他的复合字面量表示方法如下
    (int [2]\[4]) {1, 2, 3, 4},{5, 6, 7, 8}
    

    复合字面量的类型是 int [2][4]

    展开全文
  • 因此,C99标准委员会就新增了复合字面量(compound literals)。 文章目录定义语法约束语义用法文件作用域的匿名数组函数作用域的匿名数组同一函数作用域的单例复合字面量"对象" 定义 语法 ( type-name ) { ...
  • C99添加的特性,复合字面量(composite literal)。一旦熟悉并使用,便会体会到简洁强大的表达。 所谓字面量就是固定数值的表示。数值和字符串类型都有字面量的表达。如: // 100, 1.23f, "literral" 都是字面量 ...
  • 复合字面量(compound literal)

    千次阅读 2018-02-13 16:17:14
    C Primer Plus(内容笔记) 假设给带int类型形参的函数传递一个值,要传递int类型...C99新增了复合字面量 (compound literal)。字面量是除符号常量外的常量。例如,5是int类型字 面量, 81.3是double类型的字面...
  • 复合字面量是c99新增加的特性: 首先要知道复合字面量是匿名的,也就是说你不需要为它去取去一个名字,它是需要使用到它的时候才去创建它的,十分的简洁强大 可以对比一下开辟一个普通的数组和用复合字面量表示...
  • Go 中的复合字面量

    2018-08-29 10:58:00
    在源代码中字面量可以描述像数字,字符串,布尔等类型的固定值。Go 和 JavaScript、Python 语言一样,即便是复合...Golang 的复合字面量表达也很方便、简洁,使用单一语法即可实现。在 JavaScript 中它是这...
  • 复合字面量-指针学习

    2021-10-09 17:40:12
    前要:我们可以利用复合字面量直接创造一个数组,然后直接运用该数组作许多其他运算,而不用像之前还需声明后再使用 比如 int ar[2]={1,2}; ... 现在可以这样 (int [2]){1,2}//在我的理解中,这个式子与上式...
  • 复合字面量 复合字面量,是除了符号常量之外的常量,例如:5是int的字面常量,1.2是double的字面常量,'a’是char的字面常量,"hello"是字符串的字面常量。一般来说,字符常量可以方便初始化变量,而且可以用于相应...
  • 0.3 复合字面量(c99) int a[]={1,2,3,4}; sum(a); 在调用sum函数时第一个参数往往需要定义初始化,但这着实有点浪费,可以用符合字面量来解决这类问题。 sum((int []){1,2,3,4}); 格式:先在一个圆括号内给定...
  • 复合字面量(c99) 有时候我们只需要使用某一个特定的结构体一次,那么就可以采用这样的方式。 规则:要赋值的变量=(变量类型){初始化列表}; struct book { int data; int data_2; }; int main() { struct book...
  • 复合字面量(C99)

    千次阅读 2018-07-03 14:03:48
    语法,把类型名放到圆括号里面,后面紧跟一个花括号扩起来的初始化列表。int *a = (int []){1,2};例如:#include &lt;stdio.h&gt; struct argv { char a[64]; int b; }; ...,a.a,a.b...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,823
精华内容 3,929
关键字:

复合字面量