C 語言數組不攜帶長度信息,常用兩種方式:
#define SIZE 10,統一維護。sizeof 運算符:sizeof(array) / sizeof(array[0])。注意 sizeof 返回 size_t,參與有符號比較時建議強轉 (int) 或 (size_t)。
int a[] = {1,3,4,55,6,7,89,9,0};
for (int i = 0; i < (int)sizeof(a)/sizeof(a[0]); ++i)
a[i] = 0;
#define SIZE 100
int a[SIZE] = {0}; // 所有元素自動為 0,C 標準保證
int a[SIZE] = {[5] = 100, [50] = 49}; // 指定下標賦值,其餘為 0
int a[10] = {1,2,3,4,5, [0] = 6, 7, 8};
// 結果:{6,7,8,4,5,0,0,0,0,0}
// 原理:編譯器維護「下一個待初始化下標」,遇到 [0] 重置為 0,後續遞增。
const int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
優點:語義明確防誤改、編譯器優化、放入只讀段節省 RAM(嵌入式關鍵)。
int size;
scanf("%d", &size);
int a[size]; // 運行時確定大小,棧上分配
for (int i = 0; i < SIZE; ++i) b[i] = a[i];
memcpy:底層內存塊拷貝,效率更高
#include <string.h>
memcpy(b, a, sizeof(a)); // 複製整個數組字節
memcpy 通常由編譯器內建優化(向量化指令、展開循環),大數組拷貝優勢明顯。注意:僅適用於 POD 類型,含指針/類對象時需深拷貝。
sizeof 管理長度,勿硬編碼魔術數字。{0}、指定初始化器簡化代碼。const 修飾只讀數組,利於優化與安全。memcpy。本文出自 “kym” 博客,原文地址:https://kymsha.blog.51cto.com/647951/290505