// 指针
int main() {
int num = 2147483648; // 2^32 = 2147483648;大于会报错
int num1 = 4294967296;
printf("%d\n", num);
printf("%d\n", num1);
// 获取变量的指针
int a = 10;
int* p = &a; // */&
printf("%p", p);
// 指针的创建
int a = 0x11223344; // a的指针:0x11223344
printf("%p\n", a);
printf("%d\n", a); // 获取指针0x11223344对应的地址
// 指针重定义
int a = 0x11223344;
int* pa = &a;
*pa = 0; // 将指针地址赋值成0
printf("%d", a);
printf("%p", a);
return 0;
}
*/& 操作符为指针操作符
实参:char* str/如果全部使用的顺序应该是:位置参数,默认参数,*args, 命名关键字形参, **kwargs
形参:my_strlen(arr)/ 如果全部使用的顺序应该是:位置,关键字
*str/&str:指针指向地址的值;
str:数组元素的地址
str(数组)指向地址 + 1,效果等同于arr[0 + 1],获取到的是下一个变量
sizeof(int); 4字节
指针 + 1; 地址 + 4
a ——> &a; 6DD114F884 ——> 6DD114F888
指针类型决定指针位移的步长
int main() {
int a = 0;
printf("%p\n", &a);
printf("%p\n", &a + 1);
return 0;
}
野指针
概念︰野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
野指针成因
1.指针未初始化
int main() {
// int a; 局部变量不初始化,默认是随机值
// 局部的指针变量,就被初始化随机值
int* p;
*p = 20;
return 0;
}
2.指针越界访问
int main() {
int arr[10] = {0};
int* p = arr;
int i = 0;
for (i = 0; i < 12; i++) {
// 当指针指向的范围超出数组arr的范围时,p就是野指针
*(p++) = i;
}
return 0;
}
3.指针指向的地址释放
int* test() {
int a = 20;
return &a;
}
int main() {
int* p = test();
*p = 20;
return 0;
}