关于char *pc = new char[10]与char arc[10]的区别_rightman的空间_ ...

A): char *pc = new char[10];
这是动态内存分配,系统自动在内存中的栈区分配一个4个字节的空间作为指针变量pc的空间1,然后去堆区申请了一个存10个字符的10个字节的空间2,然后返回这个空间2的地址,这个地址值存到了pc变量的空间1中;这个在堆上申请的10个char的空间,程序运行时候一直存在除非你delete []pc

B): char arc[10]
这个得看你在哪定义的;
首先,如果在全局空间定义的,存放在全局静态存储区域,并且会自动初始化元素值为0。
其次,如果是在函数内定义存放在堆栈上,不会自动初始化,在函数使用完后系统自动释放。
char *pc = new char[10]; pc是个指针, pc值可以改变例如 pc = pc + 1;
char arc[10]是数组名字, arc值不可以改变,例如arc = arc + 1是非法的!

C):注意的是,
char *pc="abcdef";声明一个指针,pc在栈,“abcdef”在静态数据存储区,不可写,pc存储的是“abcdef”的首地址,pc指向“abcdef”;
char arc[]="abcdef";在局部定义的话,声明了一个字符串数组,arc在栈,“abcdef”在栈区,数据可以修改重写;

另外:注意字符数组赋值的的几种方式
char arc1[] = {'c', '+', '+'};        // 尾部无null
char arc2[] = {'c','+','+','\0'};    // 显示添加null    
char arc3[] = "c++";                // 自动添加null

一般我们拿来一个刚声明的字符数组,在用之前都会先初始化一下,如:
memset(pc, 0, 10 * sizeof(char));
或者 arc[10] = { 0 }; or memset(arc, '', sizeof(arc))

注:
sizeof(pc) : 4
sizeof(*pc):1
sizeof(arc) : 10
sizeof(arc[0]):1



郑重声明:资讯 【关于char *pc = new char[10]与char arc[10]的区别_rightman的空间_ ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——