zoukankan      html  css  js  c++  java
  • 指针和数组的区别及混淆

     

    1.char* a和char a[]

    指针是不分配内存的,它指向的是系统的只读的内存,而数组是分配内存的,就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写。

    char p[]="abc123ABC"

    char *p="abc123ABC"; 

    char* p是定义的一个指针。。他指向的字符窜"abc123ABC" 是存在不可修改的区域(代码区)的。。 而char p[]是一个数组。。他的内容存在栈区可以修改

    char p[]="abc123ABC"; //这个在常量区分配一个空间,然后又在栈上分配一个空间,将常量区的内容复制过来,所以可以修改

    字符指针变量p指向字符串常量"abc123ABC"的首地址 字符串常量存放在数据区的“常量段” 所以当你访问并修改时会内存出错

    正确的操作应该是:

    char * p = (char * )malloc(10);

    strcpy(p, "abc123ABC");

    详见:char* a和char a[]的区别

    2.char *a[N] 和char (*a)[N]

      char *a[N]:由于[ ]比*优先级要高,因此a先与[n]结合,形成a[n]形式,这显然是数组形式,它有n个元素。然后和*结合,*表示此数组是指针类型的,每个数组元素都指向一个char型的变量。

      char (*a)[N]:指针a指向的对象是有N个char元素的数组,即a是指向一维数组的指针。也即,此时a只能指向一个包含n个元素的一维数组,a的值就是一维数组的起始地址。

     

    3.int **a[3][4]

      int **a[3][4] 表示一个二维数组,每个元素都是指向指针的指针。如何理解呢?举个例子:

    int a =3;

    int *p = &a;

    int **q = &p;

    这下明白了吧。其实指针的指针也就这么回事。

     

     

     

     

  • 相关阅读:
    微信小程序
    微信小程序
    微信小程序
    微信小程序
    es5
    es5
    es5||es6
    es5
    5 个常用的软件质量指标
    Solr
  • 原文地址:https://www.cnblogs.com/zhanbiqiang/p/4023644.html
Copyright © 2011-2022 走看看