Char指向匿名char数组的指针

时间:2016-03-18 09:32:26

标签: c pointers char

我想知道如何访问以下案例中的各个元素:

char *three=(char*){'2','5','8','\0'};

如果作业是这样的:

char *three="258";

可以使用三个[0],三个[1] .....等访问它。如何在第一种情况下访问?提前谢谢......

3 个答案:

答案 0 :(得分:6)

首先{error=[e7, e8, e9, e10, e11, e12],[e13, e14 ,e15, e16, e17, e18],[e19, e20, e21, e22, e23, e24], status=[s7, s8 s9, s10, s11, s12],[s13, s14 ,s15, s16, s17, s18],[s19, s20, s21, s22, s23, s24], data=[[d7, d8, d9, d10, d11, d12],[d13, d14 ,d15, d16, d17, d18],[d19, d20, d21, d22, d23, d24]], warning=[w7, w8, w9, w10, w11, w12],[w13, w14 ,w15, w16, w17, w18],[w19, w20, w21, w22, w23, w24]}无效C.要制作复合文字,你必须这样做:

char *three=(char*){'2','5','8','\0'};

修复后,访问数据的方式没有区别。在这两种情况下,您都可以使用[]运算符来访问数据,它可以用于任何指针类型。指针指向哪里并不重要。

答案 1 :(得分:4)

您无法使用

初始化指针
char *three=(char*){'2','5','8','\0'};

你必须这样做:

char three[] = {'2','5','8','\0'};

否则,您没有存储空间来存储新启动的char数组。

然后,它完全一样。

它会产生相同的内存模式,因此您可以使用three[0]three[1]访问单个字符。

答案 2 :(得分:1)

(char*) {'2','5','8','\0'};是一个指针文字。

正如@Lundin在评论中明智地指出的那样:

  

它不是有效的复合文字。 6.7.9 / 11"相同的类型   约束和转换,如简单分配适用"。如果你   然后检查简单赋值6.5.16.1的规则,它没有列出   整数到指针转换为有效形式。所以没有   运行时未定义的行为,因为该行甚至不应该编译

要创建char数组的复合文字,请使用

char *three=(char[]){'2','5','8','\0'};

另外,请注意根据N1570 6.5.2.5:

  

12示例5以下三个表达式具有不同含义:

      "/tmp/fileXXXXXX"
      (char []){"/tmp/fileXXXXXX"}
      (const char []){"/tmp/fileXXXXXX"}
     

第一个总是有静态存储持续时间,类型数组为   char,但不必是可修改的;最后两个有自动存储   它们发生在函数体内的持续时间,第一个   这两个是可修改的。