关于c/c++struct,指针,数组,内存地址的点滴理解

来源:互联网 发布:电子地图数据下载 编辑:程序博客网 时间:2024/05/14 16:19

1:所谓变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。
2:关于结构体:

#include <iostream>using namespace std;struct test{    int i;    char* p;    short a;};int main(int argc, char const *argv[]){    test t;    cout<<&t<<endl;        //0x22fef4    cout<<&t.i<<endl;      //0x22fef4    cout<<&t.p<<endl;      //0x22fef8    cout<<&t.a<<endl;      //0x22fefc    cout<<"-----------------"<<endl;    test* pt = NULL;          cout<<&pt<<endl;      //0x22fef0    cout<<&pt->i<<endl;   //0    cout<<&pt->p<<endl;   //0x4    cout<<&pt->a<<endl;   //0x8cout<<"-----------------"<<endl;    test* ptr = NULL;    //0x22feec    cout<<&ptr<<endl;    //0    cout<<&ptr->i<<endl;  //0x4    cout<<&ptr->p<<endl;  //0x8    cout<<&ptr->a<<endl;    cout<<"-----------------"<<endl;    test te;                       cout<<&te<<endl;           //0x22fee0    cout<<&te.i<<endl;         //0x22fee0    cout<<&te.p<<endl;          //0x22fee4    cout<<&te.a<<endl;         //0x22fee8}

注:1:不管结构体的实例是什么——访问其成员其实就是加成员的偏移量。
2:
3:关于指针:其大小与机器位数有关,32位机器下,char*, int* ,struct*的指针大小都为4个字节。

0 0
原创粉丝点击