格式:指针类型 + 变量名;
指针类型:目标数据类型+ “* ”,“ *"是说明符,表示指针类型;
例如:int a=10;变量a的类型为int;&a 的类型为int *;
例如:
int a=10;
int*p=&a;
*p的类型为int 型;
a的值用p表示为:*p;
定义=类型+名字
项目 | &a[0] | a |
---|---|---|
类型 | short * | short * |
偏移量 | short(2个字节) | short(2个字节) |
定义指针类型为 :a
short *p_a=a;//p_a的偏移量是short;
short *pa_a=&a[0];
定义:short (*p)[8]=&a;
short a[8];
short *p=a;//p的类型:short *;
获取数组中元素可以使用:数组名[下标];
a+0 类型为:short *
*(a+0) 类型为:short
*(a+i) 等价于a[i];
故:*()<===>[]
p=&a[0];
p+0类型为short *;
*(p+0)类型为short ,取得第一个数组第一个元素的值p[0];
*(p+i)=p[i];
char buf[5]={'a','b'};//数组存储在栈区,共使用5个字节;
char *p=NULL;
p="HELLO";//"HELLO"是字符串常量,操作系统会在常量区分配6个字节
//p中保存的是字符串常量的地址
p[0]='H';//不能在给p[0]赋值;
int a=20;
int *p=&a;//p为一级指针
int **pp=&p;//pp为二级指针
a 的值为:*p =**p;
定义:数组内元素类型 数组名[元素个数];
short * a[10];
short * b[]={&d,&c};
short **q=NULL;
q=a;
用法:等同于数组
数组名[下标],数组中元素,为指针类型;
*数组名[下标],地址所对应的数值;
数组名:a
a=&a[0]
a[0]的类型为:short *
&a[0]的类型为:short **
结论:指针数组名用二级指针保存。
定义: int a[8];
&a的类型为:int (*)[8];
int (*p)[8]=&a;
short a[2][3]={1,2,3,4,5,6};//看成两个一维数组
人为理解:
a[0] 1 2 3
a[1] 4 5 6
但物理存储是线性的。
数组名 a: 一个一维数组,一维数组里面又是一维数组
把二维数组看成一个一维数组,元素分别是:
a[0],a[1];则该数组的首元素的地址:
为&a[0]等价与:a//行指针。
& a[0] <===> a
类型:short (*)[3] short (*)[3]
偏移量:short [3] short [3]
a,a+i 等同于 行指针:short (*p)[3]=a;
数组名a[i]: 该数组的首元素的地址:
&a[i][0] <====> a[i]
类型: short * short *
偏移量: short short
a[i[等同于列指针 short *q =a[0];
列指针获取元素:*(a[i]+j) <===>*(*(a+i)+j) ;