未初始化指针 应用解引用运算符到未初始化指针上会引起未 定义行为: 1 int *p; 2 printf("%d",*p); /*米* WRONG 米米米 ■对*直接赋值尤其需要注意,很容易出问题: 1 int *p; 2*p=1; /**米 WRONG ** 16
未初始化指针 应用解引用运算符到未初始化指针上会引起未 定义行为: 对*p直接赋值尤其需要注意,很容易出问题: 16 1 int *p; 2 printf("%d", *p); /*** WRONG ***/ 1 int *p; 2 *p = 1; /*** WRONG ***/
指针赋值 ■C允许相同类型的指针变量之间进行赋值,即 将一个指针变量的值(地址)替换为另一个指针 变量的值(地址) int i,j,*p,*q; p= &i; ■ 另一个实例:q=p; ?现在p和q指向相同的位置 p 17
指针赋值 C允许相同类型的指针变量之间进行赋值,即 将一个指针变量的值(地址)替换为另一个指针 变量的值(地址) 另一个实例:q=p; 现在p和q指向相同的位置 17 int i, j, *p, *q; p = &i;
指针赋值(续) 由于p和g都指向i,可以通过为*p或者*q中的任何一个赋值 实现对的修改: *p=1; *q=2; 2 ■可以有任意多个指针指向同一个对象 18
指针赋值(续) 由于p和q都指向i, 可以通过为*p或者*q中的任何一个赋值 实现对i的修改 : *p = 1; *q = 2; 可以有任意多个指针指向同一个对象 18
指针赋值和解引用赋值的区别 不要混淆指针赋值和解引用赋值 p; 0 *p) 第一条语句是指针赋值,赋值后两个指针指向 相同的地址,作为指针变量来说,赋值后两个 指针是相同的 第二条语句将p指向的变量的值复制到g指向的 变量位置,覆盖掉原始q指向位置的内存 19
指针赋值和解引用赋值的区别 不要混淆指针赋值和解引用赋值 第一条语句是指针赋值,赋值后两个指针指向 相同的地址,作为指针变量来说,赋值后两个 指针是相同的 第二条语句将p指向的变量的值复制到q指向的 变量位置,覆盖掉原始q指向位置的内存 19 q = p; *q = *p;
解引用赋值示意 p = &i; q &j; i = 1; 1 i ? *q=*p 1 1 20
解引用赋值示意 20 p = &i; q = &j; i = 1; *q = *p;