zoukankan      html  css  js  c++  java
  • 指针参数传递

    1、指针作为参数传递进去的仅仅只是指针的值,而不是指针的地址,或者说只是指针的一份拷贝,例如:

    void pointer(int *p)
    {
      int a = 11;
      printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);
      *p =11;
      printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);
      p = &a;
      printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);
    }
    
    int main()
    {
     int b =22;
     int *p = &b;
    
     printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);
     pointer(p);
     printf("\nthe p is %p , addr is %d, *p is %d",p , &p, *p);
    }
    
    the p is 0xbfd46498 , addr is -1076599652, *p is 22
    the p is 0xbfd46498 , addr is -1076599680, *p is 22
    the p is 0xbfd46498 , addr is -1076599680, *p is 11
    the p is 0xbfd4646c , addr is -1076599680, *p is 11
    the p is 0xbfd46498 , addr is -1076599652, *p is 11

    1、例子中,指针p的拷贝传入了方法中(其地址变了,说明是另一变量;值和指向的内存块数据没变)

    2、将p的拷贝视作p1,p1改变了其所指向的内存块的值为11

    3、p1的值改变为a的地址,即p1指向a,此时p1与p分别指向不同的内存块了,不会互相影响

    4、方法结束,p地址和值没变(改变的仅仅是p的拷贝p1),但是p所指向的内存块数据被p1所改变了,故*p为11

    总结:传入的指针仅仅是一个拷贝,方法不会改变原指针的地址、值,但是可能会改变原指针所指向内存块的数据。

    值互换的两种那个方式

    void swap(int *a , int *b)//使用指针方式修改指向内存块的值, 传值方式
    {
      printf("\n a addr : %d , b addr: %d", &a , &b);
    int temp = *a; *a = *b; *b = temp; } void swap(int &a , int &b)//使用引用方式,串引用方式 {
      printf("\n a addr : %d , b addr: %d", &a , &b);
    int temp = a; a = b; b = temp; } int a=3 , b=5;
     printf("\n a addr : %d , b addr: %d", &a , &b);
    printf(
    "\n a : %d , b : %d", a , b); swap(&a , &b); printf("\n a : %d , b : %d", a , b); printf("\n a : %d , b : %d", a , b); swap(a , b); printf("\n a : %d , b : %d", a , b);

     a addr : -1076189224 , b addr: -1076189220
     a : 3 , b : 5
     a addr : -1076189248 , b addr: -1076189244
     a : 5 , b : 3
     a : -1076189224 , b : -1076189220
     a addr : -1076189224 , b addr: -1076189220
     a : -1076189224 , b : -1076189220

    总结:方法一传入的是 a、b变量地址的拷贝,也叫传值;
         方法二传入的是变量a、b,而不是拷贝(地址相同),又叫传引用。

  • 相关阅读:
    代码书写的细节
    php中的正则函数主要有三个-正则匹配,正则替换
    2个比较经典的PHP加密解密函数分享
    淘宝运营中的6大致命误区,你犯过么?
    30分钟教你写出10分的淘宝标题
    超全的web开发工具和资源
    转化率不好?告诉你转化飙秘诀
    帮你店铺日销千单的20个淘宝小技巧
    不刷单,中小卖家如何提升店铺流量?
    使用Flexible实现手淘H5页面的终端适配
  • 原文地址:https://www.cnblogs.com/lipeil/p/2740729.html
Copyright © 2011-2022 走看看