c/c++: (char) 指针/数组 指向 “中文字符串”

最近在筹备数据结构课程设计时,偶然发现了一个char和指针相关的问题,真的是把我的薄弱点集中的满满的,都怪大一没有好好学习,欠下的债都是要还的啦~

问题如下:

char *BUSES[BUS_NUM][3]=
{
    "1路上行","1站","5站",
    "1路下行","5站","1站",
    "2路上行","6站","12站",
    "2路下行","12站","6站",
    "3路上行","9站","12站",
    "3路下行","12站","9站",
    "4路上行","6站","17站",
    "4路下行","17站","6站",
    "5路上行","15站","13站",
    "5路下行","13站","15站",
};

char *p[10]和char (*p)[10]的区别:

char *p[10]:指针数组
数组名是p,数组大小是10,数组中存放的元素是char *,即指向char类型的指针。

char (*p)[10]:指向大小为10的char数组的指针

其实我当时第一反应就是char *怎么可以指向含有这么多汉字的中文字符串??????

在c/c++中char占一个字节,而一个汉字就是两个字节了,这怎么能输出这么多中文??????

后来我就单独进行测试了一下。


#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    char *p="我真的真的真的好爱中国";
    int n;
    n=sizeof(p);
    printf("%d\n",n);
    printf("%s",p);
    return 0;
}

猜猜测试结果是什么!
在这里插入图片描述
我当时就在想为什么!

因为指针一般和数组相关联,我就又测试了数组:
c++:

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    char p[10]="我真的真的真的好爱中国";
    int n;
    n=sizeof(p);
    printf("%d\n",n);
    printf("%s",p);
    return 0;
}

在c++中这个是报错了的。
在这里插入图片描述
c:

#include<stdio.h>
int main()
{
    char p[10]="我真的真的真的好爱中国";
    int n;
    n=sizeof(p);
    printf("%d\n",n);
    printf("%s",p);
    return 0;
}

c中没有报错。
在这里插入图片描述
后来我改了一下数组大小:

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    char p[30]="我真的真的真的好爱中国";
    int n;
    n=sizeof(p);
    printf("%d\n",n);
    printf("%s",p);
    return 0;
}

测试结果如下:
在这里插入图片描述

后来我就从指针的本质入手,想通了这个问题。

首先我们看下面这条语句:

char *p=“我真的真的真的好爱中国”;

这个语句完成的是:
1.定义一个char *p,申请空间分配内存;
2.申请空间存储"我真的真的真的好爱中国";
3.把"我真的真的真的好爱中国"的首地址赋值给p;

我们看到了上面的char *p,sizeof ( p )=4!!!

这里需要注意指针内存所占字节与数据类型无关,而是和系统位数有关!!!

发布了34 篇原创文章 · 获赞 38 · 访问量 2631

猜你喜欢

转载自blog.csdn.net/qq_43779149/article/details/104544631
今日推荐