• C++指针和数组的区别(不能混用的情况)


    通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找

     这里整理的,不包括用new开辟的动态数组

    1.数组一旦声明,我们就不能再给它赋值,但是我们可以给指针赋值

    如下:

    5、6行都错,因为数组s不能作为左值被赋值

    报错阶段:程序会在编译时报错

    1 int main(){
    2     char s[]="123";
    3     char p[]="123";
    4     char *t=NULL;
    5     s=t;
    6     s=p;
    7 } 

    2.用指针定义字符串时,指针所指的字符串会被理解为常量字符串,不能修改。数组定义的字符串则可以修改。

    如下:例子中用swap对指针进行修改,比较 s 和 s1 的不同

    结果:s1的结果能够正确输出,但是程序会在swap交换s的元素时,在i=j这一句挂掉。

    原因即为上面所说,指针声明的字符串是常量的。

    报错阶段:程序运行时直接挂掉

     1 void swap(char &i,char &j){
     2     char t=i;i=j;j=t;
     3 }
     4 int main(){
     5     char *s="1234";
     6     char s1[]="1234";
     7     swap(s1[0],s1[2]);
     8     printf("%s
    ",s1);
     9     swap(s[0],s[2]);
    10     printf("%s
    ",s);
    11 } 

    在vs上调试可以看到报错为:

     3.用sizeof运算符可以计算数组变量的数组大小,但指针指向数组时,只能计算出指针本身大小(单位:字节)

    1 int main(){
    2     char *s="1234567890";
    3     char s1[]="1234567890";
    4     printf("s:%d  s1:%d  char:%d",sizeof(s),sizeof(s1),sizeof(char));
    5 } 

    运行结果:s:8  s1:11  char:1

    注意,字符串的结束符''也被sizeof计算在内,因此字符串类型比内容长1,如果是其他基本类型,则sizeof(数组名)/sizeof(类型名)即为数组长度。

     其他的问题,可以参考这个:

    《C专家编程》的笔记-指针与数组的区别

    更多的区别,待我有空拜读了《C专家编程》之后,再来解决喽

    ok~暂时就发现了这么多,拜拜(●'◡'●)

  • 相关阅读:
    我所经历的大文件数据导出(后台执行,自动生成)
    snowflake ID生成器
    docker搭建php环境
    全局唯一随机邀请码实现方式
    sitemap xml文件生成
    浏览器输入一个地址的过程分析
    DNS解析全过程分析
    nginx编译安装on mac
    nginx image_filter 配置记录
    ImageMagick简单记录
  • 原文地址:https://www.cnblogs.com/luruiyuan/p/5616379.html
Copyright © 2020-2023  润新知