C语言 —— 指针

// 指针
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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值