C語言三個點...表示什么意思
- 可變參數
- 數組批量賦相同值
- 一種數組賦值方法
1,可變參數
當參數個數可變的時候會使用三個點來表示,比如內核中的printk的定義:
static inline int printk(const char *fmt, ...)
2.數組批量賦相同值
比如指定從某個下標到另外一個下標初始化為同一個值,比如
1
2 #include <stdio.h>
3
4 int main(){
5 int table[7]={
6 [3 ... 6]=7,
7 };
8 int i = 0;
9 for(i=0;i<7;i++)
10 {
11 printf("table[%d]=%d\n",i,table[i]);
12 }
13 }
這里表示數組table 下標從3 開始到6的元素賦值為7. 如下:
3. 一種數組賦值方法
先用三點方法初始化數組,再用宏定義來對特定的值進行賦值,linux的系統調用就是使用這種方法來定義的系統調用號。
69 const syscall_fn_t sys_call_table[__NR_syscalls] = {
70 [0 ... __NR_syscalls - 1] = __arm64_sys_ni_syscall,
71 #include <asm/unistd.h>
} // 這個是linux系統代碼實例,下面用一個相對簡單的例子來理解這種方法
主函數,用[0 … 6] 對數組的所有變量賦值為7 。使用include方式包含對特定值的處理
1
2 #include <stdio.h>
3
4 int main(){
5 int table[7]={
6 [0 ... 6]=7,
7 #include "b.h"
8 };
9 int i = 0;
10 for(i=0;i<7;i++)
11 {
12 printf("table[%d]=%d\n",i,table[i]);
13 }
14 }
特定值處理頭文件b.h ,_CALL(3,5) 表示對下標為3的賦值為5。
2 #ifndef _CALL
3 #define _CALL(x,y)
4 #endif
5
6 #undef _CALL
7 #define _CALL(x,y) [x]=y,//這里是重新定義參數的形式
8
9 _CALL(3,5)
10 _CALL(4,9)
運行結果: