首页 > 代码库 > 指针和数组的区别及混淆
指针和数组的区别及混淆
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的值就是一维数组的起始地址。
指针和数组的区别及混淆
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。