C语言---指针

概念:

指针就是指地址, 指针是一种数据类型,专门用来存储地址这种数据的数据类型。

指针变量的定义:

基类型 * 变量名;

eg:
int a = 10 ;
int *p = &a;

*p运算:
1、首先拿出p中地址,到内存中定位
2、定位到之后,从定位处开始,偏移出sizeof( 基类型 ) 的一块空间
3、将这块空间当作一个基类型的(变量)来看

(可以使用强转将不同类型的变量放在指针中)

    &*p  //&(*p)  相当于取a的地址
    
    打印地址使用 ------> %p 
    
    *&p   //  ====》 p本身
              //p存放的是int * 
              // &p ==> 对应地址的类型是 int**  //int*表示基类型 后面的*表示说是一个地址类型的数据
              //*(&p)  《==》  基类型变量来看(int*类型的一个变量)  
    
    *&a   // 也就是a
    
    &*a   //会报错 a不是一个指针类型的变量 所以不能编译!运算类型不对
    

指针初始化:
int *p; //野指针  ---  指向不明确的指针    

int *p = NULL ;  //NULL是 地址 0。  

--------------------------------
连续定义多个指针变量的时候:
eg:    int *p1,*q1,*r1;                  //不能使用int *p,q,r;
    
    
为什么需要指针?
有些时候,不使用指针,没有办法达到想要的效果!

一次函数调用只能返回一个结果,可以通过指针的调用返回多个结果。    
eg:
 int add(int a, int b , int *rAdd)
 { 
     int ret ;
     ret = a + b;
     *rAdd = ret;     //通过指针的间接访问实现 被调函数 修改 主调函数中的 变量
     return re
 }
 
 int main(void)
{
    int ret1 = 0;
    printf("%d",add(1,2,&ret1));   //此时ret1中的数据就变成了ret的值啦,也就是3
}    
    
    
注意:
  使用方法:(被调修改主调)
  1、 要修改谁,就把谁的地址传过去
  2、 !!!!一定要对其做 * 运算
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值