指针
1. int (*a)[10] a是指向数组的指针 a++一次移动一个数组的大小
(理解指针时从里向外读)
2.[]优先级比*高,所以char * a[]是一个数组,元素是字符指针
3.int a[] = {1,2,3};
int *p = (int *)(&a+1); &a得到的是指向数组的指针,+1就指向了第4个元素
x = *(p-1); p只是整形指针,-1指向第3个元素
注意指针相减 与指向类型有关 不同类型不能减
4. char *s1 = "1234" 指针赋值 "1234"不在栈区,可以做返回值
char s2[] = "1234" 数组初始化
5.函数指针
函数指针 int (*p)(int,int); 赋值p = max; p = &max都可以
函数名就是指向函数的常指针
int (*(*f)(int,int))(int)
f是一个函数指针,指向的函数 返回值是一个函数指针
[]优先级比*高 所以int *p[10](); 是一个数组,元素是函数指针,无参数返回值是int
函数指针可用于异步操作的回调
函数指针例子
void sort(int (*cmp)(void *,void *)) 作形参
sort(comp); 作实参
sort((int (*)(void * ,void *))comp); 强制类型转换
6.new delete
new和delete new[]和delete[]应配对使用 如果对数组使用delete,指针直接指向的空间被释放(也就是类的大小sizeof*n) 但只对第一个对象调用析构函数,因此其它对象内部开辟的内存没有释放 所以对内置数据类型两种都可以
new可以在指定内存上构造一个对象
7. 智能指针是一个类,将指针变量封装起来,智能指针对象离开作用域时就会调用析构函数释放内存
最大好处是 避免因程序异常使delete语句没有执行。
8.句柄是个32位整数,实际上是windows在内存中维护的对象内存物理地址列表的索引 因为物理内存是变化的,将所有对象的地址记录在一张表中