指针笔记
1.
int c=0;
&c: 指向c的指针,在这里是就是c的地址
cout<< *&c <<endl; // &c: 指向c的指针,在这里是就是c的地址。此句等价于 cout<< c <<endl;
2.
指针即地址,如果变量的内容(值)是指针,则称指针变量,指针不等于指针变量
3.
int *p=&c; // 令p指向c
p++; // 由于基类型是int型,int占4个字节,则p++ <==> p=p+4;
4
int a[5]={1,2,3,4,5};
int *p=a; // 数组名是一个地址
cout<< *p++<< endl; // ++运算最后做,先打印a[0],后让p指向a[1];
p[2] <==> *(p+2) <==> a[2]
5
定义指向字符串的指针变量:
char a[6]={'h','a','s','w','d','\0',};
char *p;
p=a;
cout << a << endl;// 不像数字数组一样会打印地址,而是直接打印出字符串来
cout << p << endl; // 不像数字数组一样会打印地址,而是直接打印出字符串来
6
字符串指针直接赋值
char *p;
p="hihi";
cout << p << endl ; // 输出hihi
p++;
cout << p << endl ; // 输出ihi
cout << *p << endl ; // 输出i
7
int a[4]={1,2,3,4};
cout << a << endl; // 数组名:指向第一个元素的指针
cout << a+1 << endl; // 指向下一个元素的指针
cout << &a << endl; // &起放大作用,&a: 指向a的指针,这里表示的是:指向数组的指针,其值仍然和a值一样。
cout << &a+1 << endl; // 加1操作会跨越整个数组,会加好多
cout << *(&a) << endl; // *起缩小作用, &a指向的是数组,所以缩小后就指向第一个元素了,即等价于cout << a << endl;
按作用域的顺序考虑,例如a[3][4]作用域顺序:a[0][0],指向a[0][0]的指针(a[0]),指向a[0]的指针(a),指向整个二维数组的指针(&a)
8
int a[3][4]={{1,2,3,4},{2,2,2,2},{11,22,33,44}};
二维数组a[3][4] 包含三个元素:a[0],a[1],a[2];其中a[0]代表一个小数组名
数组名:指向第一个元素的指针
a[0]表示指向a[0][0]的指针,a表示指向a[0]的指针
a与&a[0]等价
a[0]与&a[0][0]等价
a[0]与*a等价
a[0][0]与**a等价
9
int a[3][4]={{1,2,3,4},{2,2,2,2},{11,22,33,44}};
int (*p)[4]; // 定义数组指针p,p指针一连指向4个元素
p=a;
10
静态局部变量:函数内部定义,函数用完之后该变量不会消失,但只能在定义该变量的函数内使用
例如 :static int a=1;
11
int *hi(){ } :会返回int类型的指针,但是不能返回普通局部变量的指针,而是全局变量或者静态局部变量的指针
12
int **b; b指向的内存单元的内容是个指针
int **b=new int *[3]; b[0] =new int[2]; 定义一个长度为3的数组,里面的元素是指针。该二维数组的第一行有2个元素