zoukankan      html  css  js  c++  java
  • [VC++入门]指针一

        俗话说没有搞清楚指针就没有学会C/C++,所以指针是一个相当重要的东东,相当年在用 C#调用C++写的动态链接库时,以为C++中的指针就是C#中的引用类型(ref),但是看了一下却不是这样。指针当然和内存是离不开的,有很多版本的定义,但是我觉得最容易理解的是:每一个变量都有一个内存地址,这个地址就称为指针

        有两个与指针有关的运算符:取地址运算符“&”(用于取一个变量的地址)和指针运算符“*”(以一个指针作为其操作数,其运算结果表示所指向的变量)。
     1 #include  <iostream.h>
     2 void   main()
     3 {
     4     int  a, b, *pa, *pb;
     5     a=10;   b=20;
     6     pa=&a; pb=&b;        // 使pa指向a,pb指向b
     7     cout<<*pa<<','<<*pb<<'\n';
     8     pa=&b;   pb=&a;        // 使pa指向b,pb指向a
     9     cout<<*pa<<','<<*pb<<'\n';
    10     *pa=100;   *pb=200;    // 分别对b和a赋值
    11     cout<<a<<','<<b<<'\n';
    12  }

        从上面我们可以看到声明了两个变量a,b类型为int,两个指针pa,pb(指针类型为int *,指向的类型为int)。第一步&a取得为a所分配的地址即将pa指向a的地址,所以*pa=a=10,同理*pb=b=20;第二步同理可以得到*pa=b=20;*pb=a=10;第三步由于第二步将pa指向b,pb指向a所以a=*pb=200,b=*pa=100。

        指针与数组关系密切,编程时可以用指针代替下标引用数组元素,指针使数组的使用更为灵活、有效。当声明一个数组后,编译程序会按照数组的类型和长度为它分配内存空间,数组名表示数组在内存中的首地址;当用一个指针变量存储数组首地址时,该指针就指向这个数组,就可以通过指针运算间接访问数组的元素。指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。
     1 #include  <iostream.h>
     2 void   main()
     3 {
     4     int   a[ ]={246810};
     5     int*  pa=a;            // 或pa=&a[0]
     6     int   result=0;
     7     for(int i=0; i<5; i++)
     8     {
     9         result+=*pa;           // 通过指针访问数组元素
    10         pa++;            // 指针运算
    11     }
    12     cout<<"result="<<result<<'\n';
    13  }

        从上面我们可以看到首先我们声明了一个数组,并付值也就是说分配其内存。而a表示数组在内存中的首地址,声明一个指针并指向a。则pa++就是指向数组的下一个地址(int类型占四个字节)。

    关于作者:网魂小兵

    文章出处:http://xdotnet.cnblogs.com

    本文可以随意转载,摘抄等非商业用途。

    为了尊重作者成果,在转载和摘抄的时候请留下作者名称和出处。

  • 相关阅读:
    linux基础指令(下)
    Linux基础命令(中)
    wtforms校验组件
    Linux基础命令(上)
    Scrapy
    SQLAlchemy
    自定义命令
    flask-session
    解决Failed to allocate memory: 8转
    如何做需求
  • 原文地址:https://www.cnblogs.com/xdotnet/p/vcpp_points.html
Copyright © 2011-2022 走看看