C++数组取地址问题!

    技术2022-05-20  50

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

    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; }

     

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

    程序执行结果如下截图:

     

     

     

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

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

     

     


    最新回复(0)