指针数组的命名前缀

对于指针数组,可以组合使用指针前缀和数组前缀,通常有以下几种方式:

常用命名方式

  1. 组合前缀法 (最常用) ★

    int *apValues[10];      // ap = array of pointers
    char *apszNames[20];    // apsz = array of pointer to zero-terminated string
    struct Node *apNodes[50]; // 节点指针数组
  2. 明确描述法

    int *pValuesArray[10];     // 明确表示为数组
    char *pNameList[20];       // 指针列表
    FILE *pFileTable[5];       // 文件指针表
  3. 匈牙利命名法扩展

    int *rgpiValues[10];     // rg = array, p = pointer, i = int
    char *rgszNames[20];     // rg = array, sz = string
    void *rgpvHandles[5];    // rg = array, p = pointer, v = void

常见用例示例

// 字符串指针数组
char *apszDays[] = {"Monday", "Tuesday", "Wednesday"};

// 函数指针数组
int (*apfOperations[4])(int, int) = {add, subtract, multiply, divide};

// 结构体指针数组
typedef struct {
    int id;
    char name[50];
} Employee;

Employee *apEmployees[100];

// 二级指针(指针的指针)
int **ppMatrix;         // 二维数组/矩阵
char **ppszArguments;   // 命令行参数

多维指针数组的命名

// 二维指针数组
int *appMatrix[10][10];    // app = array of pointer to pointer

// 指针的指针数组
FILE **papFiles[5];       // pap = pointer to array of pointers

// 三级指针
int ***pppCube;           // 三维指针

实际项目命名建议

  1. Linux内核风格 (倾向于描述性命名)

    struct task_struct **task_array;
    char **argv;           // 简洁明了
  2. Windows API风格 (匈牙利命名法)

    HWND *aphWnds;         // 窗口句柄指针数组
    DWORD *apdwValues;     // DWORD指针数组
  3. 现代C语言项目 (清晰性优先)

    // 清晰表达意图
    int *sorted_pointers[100];
    char *name_pointers[50];
    void *object_handles[20];

重要建议

  1. 一致性最重要:团队内部保持统一风格

  2. 可读性优先:前缀应帮助理解,而不是制造混乱

  3. 注释辅助:复杂指针类型建议添加注释

    /* 字符串指针数组,用于存储配置项 */
    char *config_items[MAX_CONFIGS];
  4. 考虑使用typedef:简化复杂声明

    typedef int* IntPtr;
    IntPtr pointer_array[10];  // 更清晰

指针数组的命名关键是清晰表达”这是一个数组,数组的每个元素都是指针”这一概念,选择让团队成员最容易理解的风格即可。