首页 > 代码库 > 指针和数组的区别及混淆

指针和数组的区别及混淆

 

1.char* a和char a[]

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

char p[]="abc123ABC"

char *p="abc123ABC";

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

char p[]="abc123ABC"; 该条语句执行的是字符串数组的赋值操作是正确的 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的值就是一维数组的起始地址。

 

 

 

 

 

指针和数组的区别及混淆