我完成这项作业后会发生什么

时间:2018-10-20 12:31:56

标签: c arrays initialization

考虑此片段

char a[]="";

是否将NULL指针分配给字符指针*a

如果没有,如何检查是否没有为a分配字符串?

4 个答案:

答案 0 :(得分:1)

  

是否将NULL指针分配给字符指针* a?

此处没有没有字符指针,但但是一个{strong> {{1} }}。

a将被定义为char的数组,并初始化为包含一个空字符串,即仅携带a终止符的c字符串,即char

  

如何检查是否已将无字符串分配给a?

因此0将只有一个元素。此元素比较等于char,后者又比较等于a

要对此进行测试

'\0'

答案 1 :(得分:0)

a将包含1个元素:

a[0] == '\0'

注意:a不是指针。

答案 2 :(得分:0)

首先,a不是字符指针,它是char的数组。在某些情况下,后者会转换为前者,但是它们本质上不是同一类型。

也就是说,在此初始化中,将使用空字符串初始化数组a

空字符串表示,第一个元素将是终止的空字符,因此检查数组是否包含空字符串的最简单方法是将第一个元素与null进行比较,例如

 if (a[0] == '\0') {  /*do the action*/ }

答案 3 :(得分:0)

==> 是否将空指针分配给字符指针*a

数组不是指针。

为了更好地理解,让我们参考C标准#6.7.9p32中的示例 [强调我的观点]

  

示例8声明

     char s[] = "abc", t[3] = "abc";
     

定义“普通” 字符数组对象 st,其元素用字符串文字初始化。该声明与

相同
     char s[] = { 'a', 'b', 'c', '\0' },
           t[] = { 'a', 'b', 'c' };
     

数组的内容是可修改的。另一方面,声明

     char *p = "abc";
     

使用“类型为char的指针” 类型定义p,并将其初始化为指向长度为4的“ char数组”类型的对象,该对象的元素初始化为字符串文字。如果尝试使用p来修改数组的内容,则该行为是不确定的。

所以,这句话

char a[]="";

定义char 数组对象a,其对象用字符串文字""初始化。请注意,""是一个包含单个字符'\0'的字符串文字。
上面的语句等同于

char a[] = {'\0'};

如果省略尺寸,编译器将根据初始值设定项的大小为我们计算尺寸(此处将为1,因为初始值设定项只有一个字符'\0')。因此,声明与

相同
char a[1] = {'\0'};