C指针初始化

之前学C++对指针初始化印象中有这种方式 int *p = 1。渐渐成习惯了,惯性理解成这样:自动给p分配一个值,指向的地址中的值是1。错误的理解方式一直延续,最近看C语言指针部分,练习好几个程序都出问题,最终发现问题在于初始化。

指针如果不初始化,成为野指针是很危险的,不知道它指向哪里,会导致覆盖随机的内存区域。

指针初始化大概有三种方式:
1.将一个同类型变量的地址赋值给指针 例如 int a = 0; int*p = a;

2.将指针初始化指向一个空位置 int* p = 0 或者 int* p =NULL;

3.通过强制类型转换 例如 int* p = (int*) 3; p的值为0x00000003。

还有一种情况,当指针作为字符串常量的首地址时。
4. char *p = “abefg”; 这里注意编译器将字符串常量放在只读数据段。只读数据段里面的数据是不可更改的。即如果 p[2] = ‘x’; 这样做是非法。
而若 char p[5] = “abcd”; p[2] = ‘x’; 这样是可以的,这里编译器将字符串以单个字符的方式存入数组,单个字符是变量,因此可以修改。

PS:数组变量名的值为数组首地址,它同指针不同的是指针是变量、其值可以更改,而数组变量名的值是常量,无法更改。例如 int a[] = “abcdf”; a++是非法的。

C语言的精华就在指针了,对地址的操作真的是很灵活很强大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值