二维数组,一维数组。

文章探讨了在C++中,二维数组TestInit和一维数组TestInit2的初始化方法区别,指出不使用取址运算符对一维数组进行初始化会导致问题,强调了二维数组和一维数组在内存表示上的差异.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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] 是一个数值。

即二维数组,与一维数组 用法还是有点区别的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值