一.数组
1.二维数组
行可以省略,列不可以省略
2.指针
(1)指针类型是一种特殊类型
DataType *name;
DataType* name;
DataType * name;
DataType :数据类型
name:变量名
指针和普通变量的区别;
指针:存地址
普通变量:存值
指针只能保存与其相同类型的地址
int *p;只能保存int型地址
char *pc:只能保存double型地址
double *pc:只能保存double型地址
(2)初始化
int *p = NULL;//ok
//NULL:表示空地址,是一个宏
int a = 3;
int *pa =&a;//ok
int *pb;
pb = &a;//ok
int *pc;
*pc = &a//error
//adress
printf("&num = %p\n",&num);
printf("pb = %p\n",pb);
//元素的访问
printf("num = %d\n",num);
//*pb是值,不是地址,pb是地址
printf("*pb = %d\n",*pb);
(3)地址的访问
*:间接访问运算符
int a = 10;
int *pb;
pb = &a; //ok
变量名 变量地址 存储
a 0x00012 10
pb ox00034 0x00012
*pb:取指针对应内存里的值
(4)可以把指针赋值给同类型指针
(5)不同类型指针的大小
64位机: 8
32位机: 4
(6)指针类型和指针所指向的类型
int *pa;
double *pb;
指针的类型:int *,double *,即去掉变量名之后的部分。
指针所指向的类型:int,double,即去掉指针变量名和其前面的*。
(7)指针与数组
数组名是一个地址,
数组元素的访问
int arr[5] = {1,2,3,4,5};
int *pa = arr;
arr[0]; arr[3];
*(arr); *(arr+3);
*pa ; *(pa+3);
pa[0] ; pa[3];
(8)野指针
没有初始化,或者其指向的内存被释放,而指针没有被置空;
危害:
造成系统资源浪费,容易造成未知的知名错误
(9)指针地址的运算
指针的自增和自减
自增:指针向高地址方向移动
自减:指针向低地址方向移动
移动的字节数是指针所指向的类型的大小
注:指针相减,表示两指针的距离,相加无意义
指针加减一个常量表示地址往高字节或地字节方向移动
常量值*sizeof(对应数据类型)个字节!
(10)概念区分
int arr[3];
//数组,大小为3,存放三个int变量
int *pb;
//指针,其类型为int *型
int *arr[3];
//指针数组
int (*pa)[3];
//数组指针,又称行指数
2.二级指针
DataType **PointorName;
int a = 10;
int *q = &a;
int **p =&q;
*p=a;
**p=*q=a
int **p;
//定义一个指针,或地址进行操作时,一定要确定指针的方向
网友评论