int a = 10; 整型变量保存整型值 int a,&a->int *
char b = 'a'; 字符变量保存字符值 char b,&b->char *
double c = 23.5; 浮点变量保存浮点值 double c,&c->double *
int *p = &a;(int *p;p=&a;) 整型地址变量保存整型地址值 int *p,&p->int **
1、指针==地址
2、获取变量地址:&变量名
3、*指针变量名:间接访问(解引用)到指针指向的变量,即指针变量只比普通变量多一个解引用的过程
int main()
{
int a = 10;
int b = 20;
int *p = &a; //定义指针p并将a的地址赋值给p,等价于(int *p;p=&a;)
*p = 100; //对p进行解引用返回到a,并将数字100赋值给a,等价于a = 100;
p = &b; //将b的地址重新赋值给指针变量p
*p = 200; //对p进行解引用返回到b,并将数字200赋值给a,等价于b = 200;
int **pp = &p; //定义一个二级指针变量pp,将指针变量p的地址赋值给二级指针pp
*pp = &a; //将指针a的地址重新赋值给二级指针pp,等价于p=&a;
**pp = 1000; //对二级指针pp进行解引用返回到指针p,再对一级指针p解引用返回到a,并将数字1000赋值给 a,等价于*p = 1000;a=1000;
*pp = &b; //将指针b的地址重新赋值给二级指针pp,p = &b;
**pp = 2000; //对二级指针pp进行解引用返回到指针p,再对一级指针p解引用返回到b,并将数字2000赋值给 b,等价于*p = 2000;b =2000;
//int *q; pp = &q; pp = &a; //error 二级指针pp的使用未解引用,
return 0;
}
4、同类型指针方可相进行赋值操作
char a;
int *p = &a; //int *p = char * 指针p为整型指针变量,a为字符型变量,不为同一变量,无法进行赋值操作
int a;
char *p1 = &a; //char *p1=int * 指针p1为字符型指针变量,a为整型变量,不为同一变量,无法进行赋值操作
int a;
int *p = &a;
int **p2 = &a; //int **p2 = int *; 指针p、p2为整型指针变量,a为整型变量,为同类型变量可以正常进行赋值操作
5、指针大小:
x86 || 32位平台,指针大小为4字节
x64 || 64位平台,指针大小为8字节
void Show(int arr[10])//数组已经退化成指针
{
printf("%d\n",sizeof(arr));
}
int main()
{
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(short*));
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(long*));
printf("%d\n",sizeof(long long*));
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
printf("%d\n",sizeof(double**));
printf("%d\n",sizeof(double**********));
int arr[10] = {1,2};
printf("%d\n",sizeof(arr));
Show(arr);
return 0;
}
//指针基本类型包含char、short、int、long、long long、float、double等,在x86 || 32位平台下指针大小均为四个字节
//数组名作为函数的参数被调用时会使数组退化为指针
//整型数组arr[10]包含十个整型变量,一个整型变量含四个字节,因此数组arr包含四十个字节,Show函数调用arr数组使arr数组退化为指针,在x86 || 32位平台下,指针大小为4字节,因此指针arr包含四个字节,