固定长度字符串数组定义

字符串是否是常量

字符串常量通常被存储在只读内存区域(如程序的文本段),这意味着它们一旦被定义,就不能被修改;

  • 直接定义的字符串字面量:如 char *str = “Hello, World!”;,这里的 “Hello, World!” 是一个字符串常量。注意,虽然这里使用 char * 类型的指针来指向它,但字符串内容本身是不可修改的。
  • 字符串字面量在表达式中的使用:只要字符串字面量(即被双引号包围的字符串)出现在表达式中,无论其上下文如何,它都被视为常量。例如,在函数参数、数组初始化、条件判断等场景中使用字符串字面量时,它们都是常量。
  • 通过字符串字面量初始化的字符数组:虽然可以使用字符串字面量来初始化字符数组,如 char arr[] = “Hello, World!”;,但这种方式下,数组 arr 并不直接等同于字符串常量。arr 是一个数组,其内容在初始化时被字符串常量 “Hello, World!” 的内容所复制,但 arr 本身不是常量,其内容(在程序运行时)是可以被修改的。然而,如果初始化的是指向字符的指针(如上文的 char *str = “Hello, World!”;),则指针指向的字符串常量内容仍然是不可修改的。

固定长度字符串数组定义

这种定义方式称为不完全类型【在后续初始化或分配内存时指定的】
char list[][11] = {
"a 1 2 ",
"g 3 4 "
};
数组的每个元素是一个包含11个字符的字符数组,但不知道整个二维数组有多少行。

(char (*)[11]) 表示 指向数组的指针;

void test(){
    // 定义一个二维字符数组并初始化  
    char list[][11] = {  
        "a 1 2 ",  
        "g 3 4 "  
    };  

    // list 是一个 指向二维字符数组的指针
    // 它本身不是指针,但它可以被视为一个指向其第一行(char[11])的指针
    // [在大多数上下文中,当你传递二维数组给函数时,它实际上会退化为指向其第一行的指针)]
    // 这个“退化”的指针并不是一个 char** 类型的指针。


    //char** 是一个指向指针的指针,它通常用于指向一个指针数组,
    // 其中每个指针又指向一个字符串。
    // char** p = doinglist;// 

    //指向字符数组的指针
    char (*p)[11] = list; 
    // 打印数组中的字符串  
    printf("%s\n", list[0]);  
    printf("%s\n", list[1]);  
    

    printf("%s\n", p[0]);  
    printf("%s\n", p[1]); 

    // 修改数组中的字符串内容(可选)  
    strcpy(list[0], "b 2 3 ");  
  
    // 再次打印以验证修改  
    printf("%s\n", list[0]);  
    printf("%s\n", list[1]);  
  
}  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值