1.指针定义及初始化
指针基础:
—指针 == 地址
—类型 *指针名;
—&变量名:获取变量的地址,‘&’称为取地址符
类型 *变量名;*是用来定义指针(地址)变量
*变量名:*是用来解引用
*在定义时,是用来说明指针变量,使用时为解引用;
指针变量比普通变量多一个解引用;
int main()
{
int a = 10;
int b = 20;
int *p = &a; //定义一个整型指针(地址)变量
*p = 100; //a = 100
p = &b; //p-->b
*p = 200; //b = 100
int **pp = &p;
*pp = &a; //p = &a
**pp = 1000; //a = 1000 ,*pp == p ;**pp == *p
*pp = &b; //p = &b
**pp = 2000; //b = 2000
return 0;
}
2.指针定义演练
练习一:
int main()
{
int a;
int b;
int c;
//定义一个指针变量p1,保存a的地址
int *p1 = &a;
//定义一个指针变量p2,保存b的地址
int *p2 = &b;
//定义一个指针变量p3,保存c的地址
int *p3 = &c;
//通过p1,p2,p3,实现c = a + b,不能使用a,b,c
*p3 = *p1 + *p3;
//通过p1,p2,p3,实现c = a * b,不能使用a,b,c
*p3 = *p1 * *p2;//*p3 = *p1**p2;(这里等价,考试容易出现)
//通过p3,实现c = c + 100,不能使用c
*p3 += 100;
//通过p1,p2,p3,输出a,b,c的值,不能使用a,b,c
printf("%d %d %d\n",*p1,*p2,*p3);
return 0;
}
练习二:
int main()
{
char a;
int b;
double c;
//定义指针变量p1,p2,p3分别保存a,b,c的地址
char *p1 = &a;//int *p1 = &a;错误,指针类型必须严格相等,才能赋值
int *p2 = &b;
double *p3 = &c;
//通过p1将a设为'x'
*p1 ='x';
//通过p2将b设为100
*p2 =100;
//通过p3将c设为23.4
*p3 =23.4;
//通过p1,p2,p3输出a,b,c的值
printf("%c %d %f\n",*p1,*p2,*p3);
return 0;
}
3.指针大小
指针大小:在32位平台(x86)为4字节,在64位平台为8字节。
int main()
{
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
printf("-----\n");
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(short*));
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(long long*));
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
printf("%d\n",sizeof(char**));
printf("%d\n",sizeof(char***));
return 0;
}