52、设有如下定义: char *aa[2]={"abcd","ABCD"}; 则以下就法中正确的是 A) aa数组成元素的值分别是"abcd"和ABCD"B) aa是指针变量,它指向含有两个数组元素的字符型一维数组 C) aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D) aa数组的两个元素中各自存放了字符'a'和'A'的地址、D、1
2 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
char *aa[2] 这样的声明,aa 其实是数组。
声明时,标识符后面跟着 [..] 就表示将标识符声明为数组,而标识符前面的那些类型表示数组元素的类型。
那么这个声明显然声明的是 aa 这个标识符。aa 后面跟着中括号,于是 aa 是数组。而声明剩下的部分是 char *,这就作为 aa 数组的元素类型。所以 aa 是“含有两个 char 指针的数组”
等号右侧的 {"abcd","ABCD"} 很显然就是给数组初始化用的。这样的初始化列表中的“东西”就(依次)作为相应数组元素的初值。
别忘了 aa 数组的元素是 char 指针类型 。
假设我们暂时把第一个元素当作 char *e0,那么其初始化相当于这个: char *e0 = "abcd"
还记得吧,字符串字面量相当于字符数组,这样把数组用作指针类型的初始的话,数组会隐式转换为“指向数组首元素的指针”。也就是这里等号右侧 "abcd" 字符数组会转换为指向这个串的第一个元素 'a' 的指针,那么这个指针就作为 e0 的初值了。最终 aa 数组的第 1 个元素(假称的e0)的值就是指向这个 "abcd" 字符数组的首地址。
同理,aa 的第 2 个元素就是指向 "ABCD" 的首地址。
- 2 回答
- 1 关注
- 1339 浏览
添加回答
举报
0/150
提交
取消