指针的定义与初始化
指针:实质同于地址
指针定义:数据类型 + * +名字
指针初始化:int *p=&a;
指针小练习:(加深理解)
int a=10;
int b=20;
int *p=&a;
*p=100;
p=&b;
*p=200;
int **pp=&p;
*pp=&a;
**pp=1000;
*pp=&b;
小练习答案:
int a=10;
int b=20;//初始化
int *p=&a;//取a的地址
*p=100;//通过指针p,访问到a,使a目前值为100
p=&b;//p取b的地址符
*p=200;//通过指针p,访问到b,使b目前值为200
int **pp=&p;//初始化,二级指针,保存一级指针p的地址
*pp=&a;//指针pp,先指向p,后p指向a
**pp=1000;//pp指针指向p,解引用两次,找到a,给a赋值为1000
*pp=&b;//指针pp,先指p,后p指向b(解引用一次,找p)
**pp=2000;//解引用了两次,则给b赋值
小练习里面的指针pp实际上情况为,指向指针的指针,其具体情况如下图
指针和普通变量唯一区别:指针多一步解引用
指针在32位平台下,指针内存大小不论数据类型都为4;64位平台下是8;
*在c语言中作用:1.乘法 2.在指针中解引用 3.定义指针时,说明类型说明符
小练习:
int main()
{
int a = 0;
int b = 0;
int c = 0;
int* p1 = &a;
//定义一个整型指针p2,指向整型变量b
//定义一个整型指针,指向整型变量c
//通过指针p1,修改a的值为100
//通过指针p2,修改a的值为200
//通过指针p3,修改a的值为300
//实现让c=a+b(不使用a,b,c)
//实现让c=a/b(不使用a,b,c)
//实现让c=c+1 (不使用a,b,c)
//打印a,b,c的值
return 0;
}
小练习答案:
int main()
{
int a = 0;
int b = 0;
int c = 0;
int* p1 = &a;
//定义一个整型指针p2,指向整型变量b
int* p2 = &b;
//定义一个整型指针,指向整型变量c
int* p3 = &c;
//通过指针p1,修改a的值为100
*p1 = 100;
//通过指针p2,修改a的值为200
*p2 = 200;
//通过指针p3,修改a的值为300
*p3 = 300;
//实现让c=a+b(不使用a,b,c)
*p3 = *p1 + *p2;
//实现让c=a/b(不使用a,b,c)
*p3 = *p1/ * p2;//优先级运算符
//实现让c=c+1(不使用a,b,c)
*p3 += 1;
//打印a,b,c的值
printf("%d\n", *p1);
printf("%d\n", *p2);
printf("%d\n", *p3);
return 0;
}