美文网首页
C++中unsigned short ()[]与unsigned

C++中unsigned short ()[]与unsigned

作者: book_02 | 来源:发表于2023-03-10 18:51 被阅读0次

1. unsigned short (*)[]与unsigned short *的异同

  1. 都是指针
  2. 前者指向unsigned short数组,后者指向unsigned short元素
    unsigned short my_array[] = { 1, 2, 3, 4, 5 };

    unsigned short(*my_pointer1)[5];
    my_pointer1 = &my_array; 

    unsigned short *my_pointer2 = my_array;

    cout << sizeof(*my_pointer1) << endl;
    cout << sizeof(*my_pointer2) << endl;

运行结果为:

10  // 为unsigned short数组的大小
2   // 为单个unsigned short元素的大小

2. 如何把unsigned short (*)[]转换为unsigned short *

将unsigned short (*)[]转换为unsigned short *是不安全的操作。

因为这会导致指针丢失数组的维度和大小信息,如上例子所示。

如果必须这样做,请使用C++中的强制类型转换来进行:

unsigned short (*p)[n];
unsigned short* ptr = reinterpret_cast<unsigned short*>(p);

3. 静态数组是如何保存维度信息的

数组是一个类型,在编译器的符号表中包含了数组名、类型、元素个数等信息。

当编译器遇到一个数组定义时,它会为数组分配内存空间,并将数组的大小存储在符号表中。

这样,在程序执行时,我们就可以通过数组名来获取数组的地址,并且可以使用sizeof运算符来获取数组的大小。

上面说的是静态数组。
对于静态数组(即在函数外部定义的数组),编译器会在符号表中存储数组的大小,包括元素个数。
因此,我们可以使用sizeof运算符来获取整个数组的大小,也可以通过数组元素个数和元素大小来计算数组的大小。

对于动态分配的数组(即在程序运行时使用malloc等函数分配的数组),由于数组大小是在运行时动态确定的。
因此编译器不会在符号表中存储数组的大小信息。在使用动态数组时,我们通常需要将数组大小显式地存储在变量中,并在程序中使用这个变量来进行数组操作。

相关文章

网友评论

      本文标题:C++中unsigned short ()[]与unsigned

      本文链接:https://www.haomeiwen.com/subject/akstrdtx.html