• VC++基础学习3(重点指针)


    一/  数组

    初始化: 应该完整书写各个元素的构造函数及成员数据初值:
        CGoods goods[3]={
            CGoods("夏利2000",30,98000.0), //调用三参数构造函数,初始化goods[0]
            CGoods("桑塔纳2000",164000.0), //调用两参数构造函数,初始化goods[1]
            CGoods() //调用默认的构造函数,初始化goods[2]
        };

    【例5.2】字符数组与字符数组相连接。
    #include <iostream>
    using namespace std;
    void strcat(char s[],char ct[]){
        int i=0,j=0;
        while (s[i]!=0) i++;
        while (ct[j]!=0)  s[i++]=ct[j++];
        s[i]='';
    }
    int main (void){
        char a[40]="李明";
        char b[20]="是东南大学学生";
        cout<<a<<endl;
        cout<<b<<endl;
        strcat(a,b);
        cout<<"字符串连接后:"<<endl;
        cout<<a<<endl;                  //打印字符数组a
        return 0;
    }

    二、指针与地址

     通过存储单元的地址来使用该存储单元,这就需要有表示存储单元地址的量——指针型变量。例如:
        int *ip; // ip是一个指针(变量)
        ip=&y; // ip是存储空间y的地址
        cout<< ip<< &y<< y<< *ip; //结果?

    取地址运算符& :作用于内存中一个可寻址的数据(如变量、对象和数组元素等等),操作的结果是获得该数据的地址。

    间接引用运算符* :作用于一个指针类型的变量,访问该指针所指向的变量。例如:
        int a=5, *pointer;
        pointer=&a; //pointer指向a
        *pointer=10; //间接访问,相当于a=10

    指针变量的赋值、初始化与简单应用

     1、对指针赋值

    对指针赋值有三种情况 :

      • 取变量地址:使指针指向该变量。
      • 指针相互赋值:使两指针指向同一变量。(查看动画演示
      • 指针赋NULL:空指针,指针悬空。不同于指针未赋值。

    注意:不能给指针变量随意赋一个地址值,只能取一个已经分配了内存的变量的地址赋给指针变量。变量或对象的内存地址是由编译系统来分配的。

     2、指针变量初始化
    例如: int age , *p_age=&age; //p_age初始化为指向整型量age。

    任何类型指针都可以赋以0值(NULL),称空指针表示该指针不指向该类型的任何一个变量(对象)。注意不是指向地址为0的内存空间

    3、指针使用时注意

      • 指针类型可以强制转换,有特殊应用,例如:
            int m, *pm=&m;
            char *p1=(char*)&m, *p2=(char*)pm;
        用pm读的是整型数,用p1,p2读的是整型数的第一个字节。
      • 同类型的指针可以相互赋值,如有说明:
            int val1=18, val2=20, *p_val1=&val1, *p_val2=&val2;
            // p_val1指向val1,p_val2指向val2
        执行 p_val1=p_val2; 后,则p_val1也指向val2,而没有指针指向val1了。(查看动画演示
      • 必须谨慎使用指针,一旦使用不当会产生灾难性的后果。
        例如,局部指针变量在定义时其中的值为随机数,即指针指向了一个无意义的地址,也可能偶然指向了一个非常重要数据的地址。如果对所指的内存进行不当操作,其中的数据就丢失了。
        再如,全局指针变量,原指向一个局部变量,后来该内存又重新分配了,我们再对该指针所指地址进行操作,同样会发生不可预知的错误。
      • 对指针变量决不可以任意赋一个内存地址,结果甚至是灾难性的。如:
            int *P=(int *)0xaf80;
        把指针变量P的初始置为0xaf80,我们并不知道那个内存单元放的是什么数据,这在一般程序中是非常危险的。
      • 如果通过指向对象或结构变量的指针变量来访问其公有成员时,则只要在指针变量名后加箭头号(箭头操作符“->”),再加公有成员名就可以了

     

     

  • 相关阅读:
    成员变量、类变量、局部变量的区别
    微服务学习笔记二:Eureka服务注册发现
    微服务学习笔记一:Spring Cloud简介
    Java集合篇六:Map中key值不可重复的测试
    重写Euqals & HashCode
    Java集合篇五:HashMap
    Java集合篇四:Map的基本应用
    Java集合篇三:Vector
    Java集合篇二:LinkList
    Java集合篇一:ArrayList
  • 原文地址:https://www.cnblogs.com/htys/p/3311852.html
Copyright © 2020-2023  润新知