数组和指针一道非常值得深思的笔试题

本文通过一道笔试题探讨C/C++中数组和指针的关系,尤其是涉及负数下标的情况。分析了数组名转换为指针地址的过程,以及如何计算负数下标元素的实际地址,揭示了C语言处理数组的本质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近笔试就遇到下面这道题,谁都不敢说自己的C/C++能有多精通,当然,工作一久,很多老毛病也就容易犯了,所以说,理论是真的很重要的,下面这道题,说实话还是挺基础的,虽然当时笔试被我给猜对了,但还是要深究一下具体的转换细节。

如题:

#include <stdio.h>
int main(void)
{
	char *str[] = {"ab","cd","ef","gh","ij","kl"};
	char *t ;
	t = (str+4)[-1];
	printf("%s\n",t);
	return 0 ;	
}

请问以上程序输出结果?程序正确运行结果如下:


我当时一看,数组下标还有负值?这是怎么一回事?我们把上面这个程序变一下,就很清晰了,如下:

#include <stdio.h>
int main(void)
{
	char *str[] = {"ab","cd","ef","gh","ij","kl"};
	char *t ;
//	t
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Engineer-Bruce_Yang

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值