指针

来源:互联网 发布:2017淘宝新店扶持多久 编辑:程序博客网 时间:2024/06/05 11:52

数组指针:array of pointers,即用于存储指针的数组,也就是数组元素都是指针。
指针数组:a pointer to an array,即指向数组的指针

int *a[4] //指针数组,表示:数组a中的元素都为int型指针,元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*int (*b)[4]//数组指针,表示:指向数组a的指针,元素表示:(*a)[i]  
#include<iostream>using namespace std;int main(){    int c[4] = { 3, 2, 1, 4 };    int *a[4];    int(*b)[4];    b = &c;    for (int i = 0; i < 4; i++)    {        a[i] = &c[i];    }    cout << *a[1] << endl;    cout << (*b[2]) << endl;}
int *a[4];int n=1;for (int i = 0; i < 4; i++){    a[i] = new int[2];}for (int i = 0; i < 4; i++){    for (int j = 0; j < 2; j++)    {        a[i][j] = n++;    }}cout << a[2][1] << endl;

二级指针

int **x;x = new int*[10];for (int i = 0; i < 10; i++){    x[i] = new int[7];}

二级指针存着一级指针地址,一级指针存着是内容地址

char s[3][10],(*k)[3],*p

s[3][10]
s可以看成一个包含3个元素的一维数组,每个元素又是一个包含10个元素的一维数组
s char(*)[10]

(*k)[3]
k是一个指针,而不是指针数组。k指向一个包含3个元素的一维数组的指针
k char(*)[3]

s是指向一维数组的常量指针,数组包含10个元素。k是指向一维数组的变量指针,数组包含3个元素。而p是指向单个变量的指针。如果一个变量算一个单位长,那么s+1就意味着指针走了10个单位长,k+1就意味着走了3个单位长,p+1就意味着走了1个单位长。
指针不仅仅是地址,它还包括它所指向的类型,这样才能知道下一步它自己要走多长。

int *s=new int[10]

s=char*

空指针不指向任何实际的对象或函数,反过来说对象或函数的指针也不可能为空指针。
malloc在内存分配失败时返回的是空指针,即NULL,而不是未初始化指针。
C++在分配内存失败时会抛出BAD_ALLOC异常
野指针:指向垃圾内存的指针,而非空指针
野指针指向一个已删除的对象或未申请访问受限内存区域的指针

1 0
原创粉丝点击