复合字面量

复合字面量

复合字面量,是除了符号常量之外的常量,例如:5是int的字面常量,1.2是double的字面常量,'a'是char的字面常量,"hello"是字符串的字面常量。一般来说,字符常量可以方便初始化变量,而且可以用于相应运算。其中较为特殊的还有数组的复合字面常量。形如:(int [2]){1, 2}

我们可以通过这样的字面常量来初始化数组:

int a[2] = {1, 3};,这时候我们省略了等号后面的数组类型名是没有问题的。

还有可以使用这样常量作为需要的数组参数,这时候就需要标注清楚数组的类型名,对于数组内元素都已知情况下,我们也可以省略数组的元素数目:

(int []){1, 2, 5, 7, 10},编译器将会将其识别为int [5]类型数组。

但是符合字面量作为一种匿名类型,我们必须在创建时候使用,否则就将会被废弃,我们可以通过一个指针来接受它的地址(它本身就作为它首元素的地址,对于C语言的各种类型的数组都是如此):

int *a = (int []){1, 2, 3, 5, 10, 15};

我们来观察一些用例

 #include <stdio.h>
 
 int main (void) {
  int *a = (int []){1, 2, 3, 4, 5};
  printf("a --> %d\n", *a);
  printf("a+1 --> %d\n", *(a+1));
  return 0;
 }
 
 /**
  a --> 1
  a+1 --> 2
 **/

 

posted @ 2021-02-25 10:41  黑尾鸥  阅读(392)  评论(0)    收藏  举报