设有以下定义和语句: char str[20]=“Program“,*p; p=str; 则以下叙述中正确的是( )。

这道题选项都含糊其词,ZZ一样,只能选出个相对正确的
选A
笔试练习遇到这题,选择A错误,说答案需要选C,就很奇怪了。
笔试练习在这里插入图片描述
个人想法
选项A、指针指向数组,p是指针p指向的地址对应的值,数组首地址为索引0的元素,所以p==str[0];
选项B、完全相同错,虽都是char,但一个是数组,一个是指针。
选项C、str数组的长度是20;p存的仅为数组首地址,
选项D、p存的是一个地址,str存的是字符串

回看这个问题,发现之前的个人想法有些描述不当,重新表述下

先说几个点:
1、指针类似于一个存放地址变量,指针本身有自己的地址
2、p是指向变量的地址, *p是指向变量的值
3、数组的地址是连续的,数组首地址等于首个元素的地址(str == &str[0] 或 *str == str[0]

数组首地址与首元素关系

int main()
{
	char str[20] = "Program";
	char *p;
	printf("%p\n", str);
	printf("%p\n", &str[0]);
	printf("%c\n", *str);
	printf("%c\n", str[0]);
	return 0;
}

数组首地址与首元素关系

回到上面的选择在题目
四个答案解析:
选项A:*p取指向地址的值,而数组的首地址和str[0]的地址是同一个,是同一地址同一个值
选项B:str是char类型数组,p是char类型指针,一个放字符串,一个放地址,虽说都是char
选项C:数组长度是20,声明时就已经确定;*p指向字符串长度是7,字符串结束符’\0’;
选项D:数组str中存的是个字符串,p存的是指向这个字符串的地址,所以放的内容不一样

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值