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,我们并不知道那个内存单元放的是什么数据,这在一般程序中是非常危险的。
    • 如果通过指向对象或结构变量的指针变量来访问其公有成员时,则只要在指针变量名后加箭头号(箭头操作符“->”),再加公有成员名就可以了

 

 

原文地址:https://www.cnblogs.com/htys/p/3311852.html