C99 引入,語法:(型別名){初始化列表},建立一個無名稱的匿名物件,產生右值,可用於任何同型別右值合法的場合。
// 等價於 int a[2] = {10, 20};
(int [2]){10, 20}
// 省略長度,由初始化列表推導
(int []){10, 20, 30} // 型別 int[3]
// 指針接收首地址
int *p = (int []){10, 20, 30}; // *p == 10
int sum(int arr[], int n);
int total = sum((int []){1, 2, 3, 4}, 4); // 無需先建立陣列變量
int (*p)[4]; // 指向 int[4] 的指針
p = (int [2][4]){{1,2,3,4}, {5,6,7,8}};
struct Point { int x, y; };
void draw(struct Point p);
draw((struct Point){10, 20}); // 臨時點座標
for (int i = 0; i < n; i++) {
process((struct Request){.id=i, .priority=high}); // 循環內臨時物件
}
#include <stdio.h>
#define COLS 4
void sum1d(int a[], int n) {
int tot = 0;
for (int i = 0; i < n; i++) tot += a[i];
printf("1D sum = %d\n", tot);
}
void sum2d(int a[][COLS], int rows) {
int tot = 0;
for (int i = 0; i < rows; i++)
for (int j = 0; j < COLS; j++)
tot += a[i][j];
printf("2D sum = %d\n", tot);
}
int main() {
int *p1 = (int [2]){10, 20};
int (*p2)[COLS] = (int [2][COLS]){{1,2,3,4}, {5,6,7,8}};
sum1d(p1, 2);
sum2d(p2, 2);
// 直接傳遞
sum1d((int []){5, 10, 15}, 3);
return 0;
}
const)