C语言 10.25
指针
引出问题:
1.指针是什么?
2.指针怎么定义?怎么初始化?
3.指针怎么应用?
指针:等同于地址
数据类型 *变量名(指针名)
*号的不同使用场景:
1.定义指针的时候,是类型说明符(说明后面紧跟变量为指针变量)
2.解引用:通过地址 可以访问到真实内存。
3.四则运算的乘号
前两种怎么区分:指针定义时表示类型说明 其他情况一般表示解引用
&号的不同使用场景:
1.取地址符(获取变量的地址)int *p=&a;表示
2.位操作
指针大小与类型没有关系只与系统有关 32位 4字节 64位 8字节.
32位如图
64位如图
练习1:
//练习1 #includeint main() { int a = 0; int b = 0; int c = 0; //定义一个整型指针p1 指向整型变量a //int *p = NULL;//野指针 13874381759 int *p1 = &a; //定义一个整型指针p2 指向整型变量b int *p2 = &b; //定义一个整型指针p3 指向整型变量c int *p3 = &c; //通过指针p1,修改a的值为100; *p1 = 100; //通过指针p2,修改b的值为200; *p2 = 200; //通过指针p3,修改c的值为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 = *p3+1;//*p3 += 1; //打印 a b c的值 printf("%d %d %dn", *p1, *p2, *p3); }
运行结果:
练习2:
//练习2
int main()
{
char a;
int b;
double c;
//定义一个指针p1 指向 a
char *p1 = &a;
//定义一个指针p2 指向 b
int *p2 = &b;
//定义一个指针p3 指向 c
double *p3 = &c;
//"abc" = char crr[4] = {'a', 'b', 'c', ' '}
//通过p1 修改a的值为‘w’
*p1 = 'w';
//通过p2 修改b的值为 100
*p2 = 100;
//通过p3 修改c的值为 3.14
*p3 = 3.14;
//打印 a b c 三者值
printf("%c %d %fn", *p1,*p2,*p3);
}
运行结果:
练习3:
#include//练习3 交换函数 三种错误写法Swap1 Swap2 Swap3 void Swap1(int a, int b)//error 经典的值传递 { int tmp = a; a = b; b = tmp; } void Swap2(int* pa, int* pb) { int* tmp = pa; pa = pb; pb = tmp; } void Swap3(int* pa, int* pb)// { int* tmp=0;//野指针 悬挂指针 或者NULL 都保存 *tmp = *pa; *pa = *pb; *pb = *tmp; } void Swap(int* pa, int* pb) { int tmp; tmp = *pa; *pa = *pb; *pb = tmp; } int main() { int a = 10; int b = 20; Swap(&a, &b); printf("%d %dn", a, b); }
运行结果:



