#include "stdio.h"
#include "iostream"
using namespace std;
typedef void* Ptr;
Ptr TestInit(void)
{
#define Max 20
static int temp[Max][2] = { {10,10},{11,11},{22,22},{33,33},{44,44},{55,55},{66,66} };
static int i = 0;
if (i < Max-1)
{
return temp[i++];
// return &temp[i++]; //这两句功能一样!
}
else
{
return nullptr;
}
}
Ptr TestInit2(void)
{
#define Max 20
static int temp[Max] = { 10,11,22,33,44,55,66 };
static int i = 0;
if (i < Max - 1)
{
//先猜一下,这里为什么不能像上面一样?
return (Ptr)&temp[i++];
}
else
{
return nullptr;
}
}
int main(void)
{
Ptr temp[5];
int BB[2][2] = { {11,22},{33,44} };
int CC[2] = { 1,2 };
temp[0] = TestInit();
temp[1] = TestInit2();
}
写个小功能时,突然发现了 TestInit2() 中不写取址运算符时,会有问题。检查以前写的 Testinit()时,才发现原来用的是二维数组。而 TestInit2()中写的是一维数组。
进一步写 BB[][], CC[] 调试验证发现:
(void*)BB[0] 0x000000176c30fb08 void *
(void*)&BB[0] 0x000000176c30fb08 void *
(void*)CC[0] 0x0000000000000001 void *
(void*) &CC[0] 0x000000176c30fb38 void *
+ BB[0] 0x000000176c30fb08 {11, 22} int[2]
CC[0] 1 int
发现 BB[0] 是一个指针,而 CC[0] 是一个数值。
即二维数组,与一维数组 用法还是有点区别的。