指针笔记

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个元素   

 

posted @ 2018-04-11 20:57  Jary霸  阅读(138)  评论(0编辑  收藏  举报