第一次周末总结
NO.1指针
Part one: *
不同意义:
int main()
{
int a = 10, b = 20;
int c = a * b; // 乘号;
int* p; // 声明指针;
p = &a;
*p = 100; // 解引用,将a赋值为100;
return 0;
}
注意:
int main()
{
int* p, s; // p为整型指针变量,s为整型变量;
int *p = &a;
int *p = nullptr; // 初始化或为空,不要为野指针;
int *p; // 野指针 ,不良的定义习惯;
return 0;
}
int main()
{
int a = 10, b = 20;
int* pa = &a;
int* pb = &b;
if (*pa > *pb) // 比较指针所指之值;
{
//;
}
if (pa > pb) // 比较指针地址,地址高则大;
{
//;
}
return 0;
}
Part two: 应用
值传递
//只将x,y的值传递给a,b(从右向左)
//最后a,b值交换,x,y不变。
void Swap_a(int a, int b)
{
int c = a;
a = b;
b = c;
}
int main()
{
int x = 10, y = 20;
Swap_a(x, y);
return 0;
}
指针传递:
//将x,y的地址传递给两个指针变量
//交换两个地址中的值,使x,y的值交换
void Swap_b(int* ap, int* bp)
{
int c = *ap;
*ap = *bp;
*bp = c;
}
int main()
{
int x = 10, y = 20;
Swap_b(&x, &y);
return 0;
}
eg.
void fun(int* p)
{
int a = 200;
*p = 100; // 3、*p等同x,将x赋值为100
p = &a; //4、p取a地址,与x无关
}
int main()
{
int x = 0;
int* s = &x; // 1、s指针变量取x地址
fun(s); // 2、指针传递,p取x地址
printf("%d %d\n", x, *s); // 输出为100 100,*s等同于x
return 0;
}
Part three:指针运算
指针可加减整形
指针可相减不可相加
类型对指针加一的影响
ip = ip + 1; // ip = ip + sizeof(datatype)
eg.
int,每次加4字节
double, 加8字节