指针赋值 int *p = arr

1. 例子:
int i, arr[10], *p=arr;
分开来就是:
int i;
int arr[10];
int *p = arr;

这里int *p = arr; 相当于:
int *p;
p = arr;

也就是说赋值的时候*p只代表它是一个指针变量,而p=arr才是它的赋值语句.
 
初始化里面的*号表示这个变量是指针类型int *a,则a是(int *)类型,
不在初始化里,*a表示指向的内存单元里存的值

*p表示数组的第一个元素了,即arr[0];
 
2.
int main()
{
    int **p;
    int a;
    
    *p = &a;
    
    printf("%x\n", p);
}
// 断错误


int main()
{
    int *p;
    int a;
    
    p = &a;
    
    printf("%x\n", p);
}
// 正常
 

为什么?

int main()
{
  int **p2;
  int *p1;
  p2=&p1; //p2 如果不指向一个确定的变量的话,直接 *p2 是一个危险的操作,你不知道指向了什么单元

  //后面的赋值写操作更危险了


  int a;
    
  *p2 = &a;
    
  printf("%x\n", p1);

  return 0;
}
指针没有初始化,而直接对其赋值操作,危险
另外即使初始化也要初始化个有效的地址,否则也会出错

因为**p 是个二维指针,你写 *p = &a;
只是给*p初始化,但是没有给**p初始化,所以报错。
因为**p 是个二维指针要指向二维的变量

说白了就是 *p 指向一个内存,**p 指向另一个内存,
你只给*p 赋值,没有给**p赋值。
所以包没有初始化错误



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值