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;
}
======================
程序执行结果如下截图:
====================
程序都有注释,对照结果我想应该很清楚,欢迎评论。