关于C语言字符串数组

*关于C语言字符串数组*

此处我为大家解决一个十分容易混淆的点。此处问题在22备考过程中问的比较多。最可气的是21、22考研场上都考到了。此处为23及以后考生做出详细解释。

首先我们来看2000年的真题,

2、#include<iostream>

using namespace std;

int main()

{

static char t[5]={"abcd", "efgh", "ijkl", "monp", "qrst", "uvwx"};

cout<<t1[3]<<" "

<<*(t1+3)<<" "

<<(((t+1)+2)+3)

<<" "<<((t[1]+2)+3)

<<endl;

cout<<**t<<" "

<<((t+1)+1)<<" "

<<t0<<" "

<<**t+1<<endl;

return 0;

}

 

这里我们该如何理解呢?

第一步:我们首先应该了解C语言编译器的一个特性,C语言中字符串都会有一个结束标志,即 ‘\0’ ,这个字符在ACSII码表中为第一个,其值为0。空字符,这是字符串中作为结束的判断标记。

此处为举例子:

 

只考虑字母只有8个,但是由于空字符的存在,所以这里必须是9个长度。

在了解C语言字符串长度的基础上,我们继续解读。

 

 

此处我们可以了解到尽管最后加了一个空字符,但是调用函数strlen()函数的时候是不计算在内的。但是最后一个‘\0’是真实存在的。

第二部:当输出函数列入 puts(); printf();cout;等C语言输出函数在输出数据的时候,遇到 ‘\0’ 就会结束输出。笔者关于这里的认识是:当输出的东西是一个指针时,它会输出到该字符串的“\0”;当输出的东西是具体某个元素时(具体指针指向的元素如:ss[1])它会直接输出该字符。

接下来我们看一段代码。

 

此处可以理解为[]为指向具体元素,而ss+n表示ss指针向后移动n位。

至此字符串数组基本理论叙述完成。

在此基础上我们再看2000年的真题。他扩充到了三维(22年是一个二维问题)。

 

其中1、关于三维指针t你可以这么理解*t行数[每个字符串长度],*

2、t[],三个括号可以理解为具体的指向某个元素。

3、t+n,为一维指针。而此处的*(t+n)为指针指向的具体元素。

4、t为二维指针指向第一行,(t+1)指向第二行,*(t+1)+1指向第二行第二个字符串。

5、t[1]也相当于指向第二行,和*(t+1)为同一个意思。

6、(t[1]+2)+3不难理解是第二行 第三个字符串 的第四个位置的指针,故(*(t[1]+2)+3)为该位置的元素也就是x。

我为大家展示下思考:

再来看一下21年真题。

 

22年真题。

 这部分用到了代码展示所以排版略显凌乱,话糙理不糙,只要能为大家拿到这5分我想是值得的。** **

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值