C++字符数组和指针
char *p="hello"和char a[]="hello world"
一、双引号做了3件事:
1.申请了空间(在常量区),存放了字符串
2. 在字符串尾加上了'/0'
3.返回地址
二、sizeof(p)=4;sizeof(*p)=1;sizeof(a)根据a所在位置,如果是作为函数的形参sizeof(a)=4;sizeof(a)=12;
三、
*p的值是不能更改的了,但可以p=“efg”。P的值可以更改,但所指向的内容为常量不能更改。*p=”efg”是不被允许的。P=’A’是不符合规范的
四、
Char a[10]=”hello”是 允许的,但是char a[10]={};a=”hello”是不允许的,因为a虽然是地址,但是是个常量不能更改。a[0]=’A’可以l类似于*a=’A’
对于函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通的指针类型,如对于void func(char sa[100],int ia[20],char *p)。则sa的类型为char*,ia的类型为int*,p的类型为char*。所以sizeof(sa)=4
五、
快速排序和堆排序的代码思想
递归思想,找到low指针,分成0-low-1和low+1-high指针
堆排序:
- 建立大顶堆;对数组所有节点依次建立大顶堆for循环
- 建立循环,将建好的大顶堆的根节点与最后一个元素交换位置,再从新建堆。