首页 > 试题广场 >

若有以下程序段,不能正确引用字符串的选项是?

[单选题]

若有以下程序段

char str[4][12] = {"aa", "bbb", "cccc", "d"}, *strp[4];
int i;
for (i = 0; i < 4; i++)
    strp[i] = str[i];

不能正确引用字符串的选项是

  • str[0]
  • strp
  • strp[3]
  • * strp
推荐
编辑于 2018-05-07 16:17:10 回复(4)
char str[4][12]={"aa", "bbb", "cccc", "d"},*strp[4];
int i;
for(i=0;i<4;i++) 
    strp[i]=str[i];
1、首先要知道*strp[4]是一个指针数组 ,里面存放的是指针  。(为什么?因为 [] 括号的优先级高于 *     ,也就是strp先和 [] 结合 构成数组,先与谁结合本质就是什么,因此是本质是数组,数组中存放的是指针,同理理解记忆数组指针 (*p)[]  )  

2、要知道二维数组的第一维是行指针,什么意思?
   比如str[4][12] 中 str[0] ,str[1] , st[2] , st [3]  也就是第一维,他们都是行指针, 分别指向每一行

3、数组名是一个常量指针,在B选项中 strp是  指针数组  * strp[4]  的数组名, 也就是  strp = & strp[0] , 而strp[0]是指向 aa 的,&strp[0] 当然就错了
   
这一题就考察上面3个知识点
发表于 2018-12-10 09:53:23 回复(1)
1. str是二维数组名,所以str是二级指针,strp是指向指针的一维数组名,所以也是二级指针;
2. 字符串“abc”等表示的是(一级)指针,所以可以有:char *p = "hello"这种用法;
3. 题目问引用字符串,说明找一级指针,对二级指针取值就好了;
A. str[0]  B. strp[3] D. *strp都是对二级指针取值得到的一级指针,都可以用来表示字符串,分别表示“aa”, "d", "aa"
发表于 2018-04-11 14:58:12 回复(3)
strp代表数组 strp[4]的首地址,这个数组存储的值是指向每个字符串的指针
发表于 2015-06-11 13:03:57 回复(2)
strp代表数组的首元素的地址,首元素为指向“aa”的指针,那么strp就是指向“aa”指针的指针,是一个二级指针
发表于 2016-07-14 14:21:44 回复(0)
strp是一个指针数组,即包含4个一维指针的数组,我们知道一个数组的数组名表示的是数组首元素的地址,*数组名 表示数组首元素,所以strp表示指针数组首元素的地址,而 *strp表示指针数组首元素的内容,也是str[0]的地址,看下面的图可能会更清晰一点

编辑于 2020-06-06 11:25:40 回复(0)
strp表示strp[4]数组首地址,等于&strp[0]。而*strp=strp[0]。
发表于 2015-11-04 00:13:36 回复(1)
A、C、D都是字符串首元地址,所以能打印出字符串
而B strp为 指针数组名,数组名 是 数组首元素地址,时候"aa”的元素的首地址 !不是字符串首字母的地址!
发表于 2018-01-13 12:59:29 回复(1)
[]实际上是变址运算符,即将strp[i]按a+i计算地址,然后找出此地址单元中的值。等价于* (strp + i)
发表于 2017-09-02 15:56:17 回复(1)
*strp[4]是指针数组,数组里面存放的是指向str每个字符串的指针。
发表于 2015-08-10 20:46:21 回复(0)
str[0]不是表示二维数组首行的行地址吗,怎么能正确表示aa呢
发表于 2020-11-25 09:25:44 回复(0)
char *strp[4];
char strp[4];
这两个的区别:前一个带了一个动态指针,叫做strp,也代表这个数组的首元素地址;后一个的数组名str是个静态指针,也带表数组首元素的地址。前面的strp可以++   后面不行,是一个常量。

操作数组的方式:
① 数组名 ,如 strp[0]、strp[1]
② 指针,如 *strp、*(strp+1)
用一个指针操作一个数组:
char *p = a[4];
*(p+1)、p[1]、a[1]三者等价。
编辑于 2019-03-28 18:28:20 回复(0)
cout<<str[1]<<","<<str[1][1];输出bbb和b
发表于 2023-10-23 10:22:40 回复(0)
指针数组与数组指针
发表于 2018-11-27 04:00:59 回复(0)
str[0]      会调用数组第一行数据“aa”
strp         是一个地址,打印出来不是数据
strp[3]     是第三行的首地址
*strp        是strp[0]的地址解引用,也就是第一行数据“aa”
发表于 2023-10-21 15:15:10 回复(0)
*(p+2)的作用等价于p[2]
发表于 2023-06-10 20:12:19 回复(0)
strp是指针数组的地址,它指向指针数组的首地址也就是“aa”的地址。
发表于 2021-08-28 22:33:15 回复(0)
<p>strp是数组名可以看作一个指针,里面存的是地址</p><p>*strp是对指针的解引用是一个值</p>
发表于 2020-08-19 23:31:54 回复(0)
strp是首地址
发表于 2020-08-07 00:20:56 回复(0)
strp是  存放指向字符串“aa”的那个指针  的地址,也即是字符串指针的地址,不是字符串的地址
发表于 2020-07-04 01:28:17 回复(0)
本题考查:  char str[4][12] (是一个二维数组,本质是一维数组) -> char[12] str[4]; 有四个元素,每个元素里有12个字符长度的空间;
str[0] ->  aa
str[1]  ->  bbb
str[2]  ->  cccc
str[3]  ->  d
char * strp[4] -> 是一个字符型指针数组; 
char[4] *strp -> 4个字符型指针  类比: int a[10] -> 10个int型变量
strp是这个数组的数组名称,即首地址;
每个元素中包含一个指针
变量跟踪:  i=0; i<4;  strp[0]=str[0];  把“aa”这个字符串的首地址赋值给str[0];str[0]指向"aa"这个空间;
以此类推:    想要引用字符串; strp肯定是不行的; 因为strp是指针数组的首地址,
指向的是指针。
发表于 2020-03-29 18:22:42 回复(0)