zoukankan      html  css  js  c++  java
  • 【C++】指针和数组之区别

    指针和数组之区别
     
     

    数组名可以当作一个指针来用,数组名可以用*取其中的值,指针也可以用[]解引用,但它
    们还是有一些区别的,我知道的有3个:

    1.数组名不可以作为左值,关于这一点,可以将数组名理解为指针常量
     int a[10],*b;
     b是一个指针型变量,a是一个数组。
     b是左值,可以存在b=a;
     a不是左值,不能出现在"="左边。
     a相当于一个常量,类型为数组。

    2.对数组名进行sizeof运算时,结果是整个数组占用空间的大小,而sizeof(指针)得到的值
     是编译器分配给指针(也就是一个地址)的内存空间。(对于比较老的编译器如TC,指针所占
     字节数通常是2,对于现在常见的编译器一般是4)

    3.对数组名作&(取地址)运算,得到的还是数组第一个元素的地址,对指针取地址时得到的
     结果是指针所在的地址,也就是指向这个指针的指针。

    4 运算
     一维数组和指针在"*"运算是都有访存操作。
     多维数组在"*"运算只是类型改变,没有具体操作。
     指针变量在"*"运算时先访存,获得地址,再取地址对应内存中的值。

     指针变量在"&"运算时,得到指针变量的地址。
     数组在"&"运算只是类型改变,没有具体操作。

     获取数组大小之方法:

    #define size_of_array(x) (sizeof(x) / sizeof (x[0]))


    5 字符串指针与字符数组之区别:

     char* p1 = "Hello World";       //分配字符串常量,然后赋给 p1
     char p2[20] = "Hello World";    //分配一个数组,然后初始化为字符串

    p1可以指向别的地方,但hello world不能更改,
    eg:

    *p1 = 'h';


    p2不能指向别的地方,但hello world可以更改
    eg:

    p2[0] = 'h';


    第一个字符串指针的操作等价于:

      const char S[12] = "Hello World";
      char* p1;
      p1 = &S; // p1 = S;
      char p2[20];
      strcpy(p2, S);

    6。只有指针可以使用增量运算符,sz**。

    7。数组可以附给指针,反之则不可以。

     

  • 相关阅读:
    OS程序开发引用的第三方库之间出现冲突的处理方法
    ios的指令集(转)
    查看lib库支持的IOS指令集
    Audio Session Programming Guide
    Swift中文教程
    NSString 与 char * 互转
    id 与void *类型的转换(转)
    versions使用(转)
    superview透明问题
    Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区别
  • 原文地址:https://www.cnblogs.com/dracohan/p/1614082.html
Copyright © 2011-2022 走看看