C++数组取地址问题!

http://blog.youkuaiyun.com/chenjintaoxp/article/details/6215290

昨天在公司看代码,看到了这样语句:

class LogInfo

{

private:

 char szDateTime[14];

 ...

};

...

if(memcmp(&jobInfo1.LogInfo.szDateTime, &jobInfo2.LogInfo.szDateTime, 14) < 0){}

...

而看memcmp的函数原型

int memcmp( const void *buf1, const void *buf2, size_t count );没想明白给数组名取地址表示啥?

因此自己调查了一下,感觉很有趣,也很有用,给大家分享一下:

 

文件:main.cpp 

==============

///数组取地址问题///
#include<iostream>
using namespace std;
int main()
{
    ///静态数组(栈)
    int szA[5] = {1,2,3,4,5};
    cout <<"-----------------szA--------------------"<<endl;
    cout <<"-------result of szA is follow:--------"<<endl;
    cout << "szA = " << szA << endl;//指数组首元素的地址
    cout << "szA+1 = " << szA+1 << endl;//指数组第二个元素的地址
    cout << "&szA = " << &szA << endl;//指数组的地址
    cout << "&szA+1 = " << &szA+1 << endl;//指数组地址的下一个地址,即:&szA+1 = szA+sizeof(szA);
    cout << "*szA = " << *szA << endl;//数组数组首元素
    cout << "*(szA+1) = " << *(szA+1)<< endl;//数组第二个元素
    cout << "*(&szA) = " << *(&szA) << endl;//数组地址存放的内容即:首元素
    cout << "*(&szA+1 ) = " << *(&szA+1) << endl;//数组地址的下一个地址内容
    cout <<"------result of pA is follow:----------"<<endl;
    const int *pA = szA;
    cout << "pA = " << pA << endl;//指数组首元素的地址
    cout << "pA+1 = " << pA+1 << endl;//指数组第二个元素的地址
    cout << "&pA = "<< &pA << endl;//指存放pA的地址
    cout << "&pA+1 = " << &pA+1 << endl;//指存放pA地址的下一个地址
    cout << "*pA = " << *pA << endl;//指数组首元素
    cout << "*(pA+1) = "<< *(pA+1) << endl;//指数组第二个元素
    cout <<"*(&pA) = " << *(&pA)<< endl;//指存放pA地址的内容即:数组首元素地址pA
    cout << "*(&pA+1) = " << *(&pA+1) << endl;//指存放pA地址的下一个地址内容
    ///动态创建数组(堆)
    cout <<"---------------szB---------------------"<<endl;
    cout <<"-----result of szB is follow----------"<<endl;
    int *szB = new int[5]{1,2,3,4,5};
    cout << "szB = " << szB << endl;//指数组首元素地址
    cout << "szB+1 = " << szB+1 << endl;//指数组第二个元素的地址
    cout << "&szB = " << &szB << endl;//指存放szB的地址
    cout << "&szB+1 = " << &szB+1 << endl;//指存放szB地址的下一个地址
    cout << "*szB = " << *szB << endl;//指数组首元素
    cout << "*(szB+1) = " << *(szB+1) << endl;//指数组第二个元素
    cout << "*(&szB) = " << *(&szB) << endl;//存放szB得之的内容:数组首元素地址szB
    cout << "*(&szB+1) = " << *(&szB+1) << endl;//指存放szB地址的下一个地址内容
    ///结论:从堆中申请的数组(szB)的地址用法和用指向静态数组的指针(pA)用法相同
    ///字符串数组
    cout <<"---------------szC-------------------"<<endl;
    cout <<"-----result of szC is follow -------"<<endl;
    char szC[6] = {'C','h','i','n','a','/0'};
    cout << "szC = " << szC << endl;//指数组首元素地址,由于是字符串会输出从首元素开始到'/0'
    cout << "szC+1 = " << szC+1 << endl;//指数组第二个元素地址,从第二个字符开始到'/0'
    cout << "&szC = " << &szC << endl;//指数组的地址
    cout << "&szC+1 = " << &szC+1 << endl;//指数组地址的下一个地址即:&szC+1 = szC+sizeof(szC)
    cout << "*szC = " << *szC << endl;//指首元素
    cout << "*(szC+1) = " << *(szC+1) << endl;//指第二个元素
    cout << "*(&szC) = " << *(&szC) << endl;//指数组地址存放的内容
    cout << "*(&szC+1) = " << *(&szC+1) << endl;//指数组地址下一个地址存放的内容
    return 0;
}

======================

程序执行结果如下截图:

 

 

 

====================

程序都有注释,对照结果我想应该很清楚,欢迎评论。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值