C++中 ,一个数组是否可以连续存储不同数据类型的多个数据啊?如果可以,应该怎样存呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中 ,一个数组是否可以连续存储不同数据类型的多个数据啊?如果可以,应该怎样存呢?相关的知识,希望对你有一定的参考价值。

我是新手,望高手指点!!

一般的数据是不行的,但有一种数据类型叫做共用体,可用来存不同类型的数据。定义方法的例子如下:
union icf
int i;   char c;   float f;   ;
icf arrDate[5];
arrDate[0].i=3;
arrDate[1].c='a';
arrDate[2].f=4.3;
则arrDate的第一个元素中存的是整型,第二个元素中存的是字符型,第三个元素中存提浮点型。
参考技术A 额,数组中的数据类型应该都是一样的。如果有不同数据类型的,可以定义一个struct,其中包含了你想要的数据类型,然后定义struct数组就行了。本回答被提问者采纳 参考技术B 理论上说是不可以,数组是一组同类型的数据的集合。 参考技术C #include <stdio.h>
int main(void)

char tmp [100];

tmp[0] = 'A';
*(int *)(&tmp[1]) = 23;
*(float *)(&tmp[5]) = 23.0f;

printf("%c %d %f\n", tmp[0], *(int *)(&tmp[1]), *(float *)(&tmp[5]));
return 0;


最好别这样,虽然内存中才不管你存什么

C++| C++ 入门教程 数组

5 数组

5.1 概述

所谓数组,就是一个集合,里面存放了相同类型的数据元素

特点1:同一个类型

特点2:存储空间连续

5.2 一位数组

5.2.1 一位数组的定义方式

三种定义方式:

  1. 数据类型 数组名[ 数组长度 ];
  2. 数据类型 数组名[ 数组长度 ] = { 值1, 值2,……};
  3. 数据类型 数组名[] = { 值1, 值2,……};

第三种定义方法并不是没有数组长度,而是编译器会根据你后面的值的数量自动生成一个长度。

5.2.2 数组名的用途

可以统计数组在内存中的长度

可以获取数组在内存中的首地址

思考:

我现在有一个数组int arr[10]此时,arr代表的是第一个元素的地址

那么,arr+1 应该和 &arr[1] 一样,代表的是第二个元素的地址

如果是 &arr[0] + 1呢,代表的是第一个元素的第二个字节的地址么?

关于数组名的几种使用,对于数组名的意义,我做了一个实验,写了代码如下:

#include<iostream>
using namespace std;

int main() {
    int arr[7]{ 5,2,0,1,3,1,4 };
    cout << "&arr[0] = " << (int)&arr[0] << endl;
    cout << "arr = " << (int)arr << endl;
    cout << "&arr[1] = " << (int)&arr[1] << endl;
    cout << "arr + 1 = " << (int)(arr + 1) << endl;
    cout << "&arr[0] +1 = " << (int)(&arr[0] + 1) << endl;
    cout << "&arr + 1 = " << (int)(&arr + 1) << endl;
    
    cin.get();
    return 0;
}

分别对应几种组合,最后输出如下:

&arr[0] = 11794864

arr = 11794864

&arr[1] = 11794868

arr + 1 = 11794868

&arr[0] +1 = 11794868

&arr + 1 = 11794892

可以最后看出来arr指向的是数组的第一个元素,在这个基础上,无论是arr + 1,还是&arr[1],还是&arr[0] + 1对应的都是第二个元素。

但是&arr虽然地址也是第一个元素的地址,但是实际上是指向整个数组的地址。所以&arr + 1地址上会直接加上28。

那问题来了,之前的笔记提过,数组作为参数传入函数是只有第一个元素的地址的。那可以尝试用这种方法么?

事实是,这种语法是被禁止的。在函数的参数中写&会被当成引用。

5.3 二维数组

5.3.1 二维数组定义方式

四种定义方式:

  1. 数据类型 数组名[ 行数 ][ 列数 ];
  2. 数据类型 数组名[ 行数 ][ 列数 ] = {{ 数据1, 数据2}, { 数据3, 数据4}};
  3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1, 数据2, 数据3, 数据4};
  4. 数据类型 数组名[][ 列数 ] = { 数据1, 数据2, 数据3, 数据4};

建议使用第二种方法,并且每一行数据单独成行,可以提高代码的可读性。

5.3.2 数组名的用途

可以统计数组在内存中的长度

可以获取数组在内存中的首地址

思考:

如果现在有一个二维数组int arr[i][j],和一维数组相同。arr 表示第一个元素,但是也可以用 arr[n] 来表示第 n+1 行的首地址。

以上是关于C++中 ,一个数组是否可以连续存储不同数据类型的多个数据啊?如果可以,应该怎样存呢?的主要内容,如果未能解决你的问题,请参考以下文章

c++中数组和对象的数据是存储在栈内存还是堆内存?

c++中数组和对象的数据是存储在栈内存还是堆内存?

C++笔记--数组

C++笔记--数组

2.5数组

基于arm的C++反汇编 数组和指针的寻址