为了账号安全,请及时绑定邮箱和手机立即绑定

52、设有如下定义: char *aa[2]={"abcd","ABCD"}; 则以下就法中正确的是

52、设有如下定义: char *aa[2]={"abcd","ABCD"}; 则以下就法中正确的是

C
包小龙虾 2018-08-22 16:50:28
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" 的首地址。

查看完整回答
反对 回复 2018-08-23
  • 包小龙虾
    包小龙虾
    是不是相当于说把"abcd" 这个整体当做第一个元素,把"ABCD"当做一个整体作为第二个元素,所以说aa 数组的第 1 个元素(假称的e0)的值就是指向这个 "abcd" 字符数组的首地址。 同理,aa 的第 2 个元素就是指向 "ABCD" 的首地址 吗?
  • onemoo
    onemoo
    是的。初始化数组时的初始化列表 { XXX, YYY, ZZZ, ... } 其中的每个XXX、YYY 这样的“东西”就依次作为数组元素的初值,不论这个“东西”是什么。 这里的“东西”就是两个字符串字面量。
  • 包小龙虾
    包小龙虾
    嗯嗯,好哒,我明白啦,谢谢大神
  • 2 回答
  • 1 关注
  • 1277 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信