当前位置:编程学习 > C/C++ >>

[C/C++学习]指针一些事

[cpp]
#include<iostream> 
using namespace std; 
 
int main(void) 

    /***********************************************************
    指针,内存地址,指针取值,指针是啥
    指针是一个存储计算机内存地址的变量。   这里引用是计算机内存地址。
    从指针指向的内存读取数据叫:指针取值。
    指针可以为void类型,也可以是其他的内置数据类型等。
    也有NULL指针和未初始化指针。
    “*”操作符可以用来声明一个指针变量,也可以是解引用操作符,当然也可以是
    乘法操作符。
    “&”是地址操作符。  通过在变量前加上&我们可以得到这个变量的地址
    ***********************************************************/ 
 
 
    int *ptr; //声明一个int类型的指针 
    int value = 1;//声明一个int类型的值,值为1 
    ptr = &value;//给指针分配一个int类型的值的引用 
    int *p = ptr;//对指针进行取值,这里可以直接获得指针指向的内存地址中的数据 
    cout << p << endl; 
    /******************************************************************
    类比一下,指针比作信封     引用比作邮箱     值比作房子
    ok,我们在信封上面写上邮寄的地址(引用地址),  我们来取值就相当于地址
    对应的房子。我们也可以把信封上的地址涂掉,然后写上其他的我们想要的地址
    房子是在哪里不动的,所以不受影响。
    *******************************************************************/ 
 
 
    /*********************************************************************
    下面是void指针    NULL指针    未初始化指针
    *********************************************************************/ 
    int *ptrs;//未初始化 
    int *ptring = NULL;//NULL指针 
    void *vptr;//void指针  未初始化 
    int *iptr; 
    int *vastptr; 
    //void类型可以存储任意类型的指针或者引用 
    iptr = &value; 
    vptr = &value; 
    cout << iptr << vptr << endl; 
    //显示类型转换  把一个void指针转换成int指针,并取值。 
    vastptr = static_cast<int*>(vptr);  //(int*)vptr; 
    cout << *vastptr << endl; 
 
    //cout << ptrs << ptring << endl; 
    /******************************************************************
    要知道,未初始化的指针也是有内存地址的,但是是一个垃圾地址。
    所以我们不能对未初始化的指针取值。
    最好的情况是你去到的是垃圾地址,接下来你需要对程序进行调试
    最坏情况就会导致程序崩溃。
    *******************************************************************/ 
 
 
    /********************************************************************
    数组是一断连续的内存空间,来存储多个特定类型的对象。
    指针用来存储单个内存地址
    所以数组和指针不是相同的结构,不能互相转换。
    数组变量是一个常量,就算指针变量指向相同的地址或者一个不同的数组,
    也不能把指针赋值给数组变量。
    我们可以把数组变量赋值给指针时,世界上把指向数组第一个元素的地址赋值给指针。
 
    要注意的是:指针需要和数组元素类型保持一致,除非指针是void类型。
    ********************************************************************/ 
    int myarray[4] = {1, 2, 3, 0}; 
    int *ptrarray = myarray;//*ptrarray = &myarray[0]; 
    cout << *ptr << endl; 
    //ok上面的操作时正确的。来看下面的错误 
    //myarray = ptrarray; 
    //myarray = myarrays; 
    //myarray = &myarrays[0]; 
 
    /******************************************************************* 
    结构体和指针。   与数组类似,指向结构体的指针存储了结构体第一个元素的 
    内存地址。    结构体的指针必须声明和结构体类型保持一致 或者为void 
    *******************************************************************/ 
    struct person{ 
        int age; 
        char *name; 
    }; 
    struct person first; 
    struct person *ptrstruct; 
 
    first.age = 22; 
    char *fullname = "full name"; 
    first.name = fullname; 
    ptrstruct = &first; 
 
    cout << first.age << ptrstruct->name << endl; 
 
 
    return 0; 

看运行结果:


                                                                                                                                                                                                                    2012/9/27
                                                                                                                    &nbs

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,