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

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

A) aa数组成元素的值分别是"abcd"和ABCD"

B) aa是指针变量,它指向含有两个数组元素的字符型一维数组 C) aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 

D) aa数组的两个元素中各自存放了字符'a'和'A'的地址、D、1


包小龙虾
浏览 1340回答 2
2回答

onemoo

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" 的首地址。
打开App,查看更多内容
随时随地看视频慕课网APP