4-18-1-使用指针交换数据、多线程参数传递、多线程通信、指针与数组

1、指针运算符

指针必须初始化

不可以取常量的地址,比如&1,或者&(a+1)(因为常量是在寄存器中产生)

const int num = 3;
//*(&num) = 10;//因为num是const int类型,所以不能使用指针直接修改
*(int*)&num = 10;//但是可以强制转化为变量类型,再通过指针修改
//不可以写成(int)num=10;//不允许强制转化数据类型,强制转化是在寄存器产生,无法读取到地址
int a = 10;
void *p =&a;
//printf("%d",*p);//无法确定指针类型
printf("%d",*(int *)p);//强制转化指针类型


不可以对变量取两次地址,比如&&a,&a在寄存器中产生,不可以取寄存器的地址

*a这样也是不允许的,*是对后面括号中的地址取出数值。a不是地址,应写为*(&a)

 

直接访问:a=3

间接访问:*p=&a;*p=3;

 

零指针(空指针):int*p=NULL;int *p=0;

p=NULL与未对p赋值不同。

用途:避免指针变量的非法引用;在程序中常作为状态比较

 

改变一个变量,需要变量的地址,

改变一个指针变量,需要指针变量的地址

 

数据交换

1、

void change1(inta, int b)//不能成功
{
       int temp = a;
       a = b;
       b = temp;
}

2、

int*pa=&a,*pb=&b;
scanf("%d%d",pa, pb);//可以直接给a,b赋值
 

3、

void change2(int*pa, int *pb) //
{
       int temp = *pa;
       *pa = *pb;
       *pb = temp;
}//指针*pa,*pb交换成功,a,b交换成功
 
change2(pa,pb);//可以成功

4、

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值