【问题标题】:Array pointer notation C++ (when moving array)数组指针符号 C++(移动数组时)
【发布时间】:2020-06-21 10:43:38
【问题描述】:

我已经写了这段代码, 这应该将我的数组移动 1:

// Declare and initialize Array
int temp;
int dim[5] = { 6, 7, 8, 9, 10 };


int array_size = sizeof(dim) / sizeof(dim[0]);
cout << "Array-Size: " << dim[array_size - 1] << endl;

// Move by 1 position
for (int i = 0; i < (array_size - 1); i++)
{
    temp = dim[array_size - 1];
    dim[array_size - 1] = dim[i];
    dim[i] = temp;
}

// Console Output
for (int i = 0; i < array_size; i++)
{
    cout << dim[i] << ' ';
}

一切正常,但我想将其更改为指针表示法。我已经尝试了很多东西,但是当我将数组更改为指针表示法时,我得到了一个奇怪的输出。首先,甚至可以将代码更改为指针表示法,其次,如果可以,我应该怎么做? 我将不胜感激任何建议。谢谢!

【问题讨论】:

  • dim[i]*(dim + i) 的语法糖。
  • 这又只是 i[dim] 的语法糖;)

标签: c++ arrays pointers move notation


【解决方案1】:

dim[i]*(dim + i) 的语法糖。您可以用等效的指针表示法替换所有数组表示法。

// Declare and initialize Array
int temp;
int dim[5] = { 6, 7, 8, 9, 10 };


int array_size = sizeof(dim) / sizeof(dim[0]);
cout << "Array-Size: " << *(dim + array_size - 1) << endl;

// Move by 1 position
for (int i = 0; i < (array_size - 1); i++)
{
    temp = *(dim + array_size - 1);
    *(dim + array_size - 1) = *(dim + i);
    *(dim + i) = temp;
}

// Console Output
for (int i = 0; i < array_size; i++)
{
    cout << *(dim + i) << ' ';
}

使用动态内存分配:

// Declare and initialize Array
int temp;
int array_size = 5;
int *dim = new int[array_size]{ 6, 7, 8, 9, 10 };

cout << "Array-Size: " << *(dim + array_size - 1) << endl;

// Move by 1 position
for (int i = 0; i < (array_size - 1); i++)
{
    temp = *(dim + array_size - 1);
    *(dim + array_size - 1) = *(dim + i);
    *(dim + i) = temp;
}

// Console Output
for (int i = 0; i < array_size; i++)
{
    cout << *(dim + i) << ' ';
}
delete[] dim;

在for循环中使用动态内存分配和指针:

// Declare and initialize Array
int temp;
int array_size = 5;
int *dim = new int[array_size]{ 6, 7, 8, 9, 10 };

cout << "Array-Size: " << *(dim + array_size - 1) << endl;

// Move by 1 position
for (int *ptr = dim; ptr < (dim + array_size - 1); ++ptr)
{
    temp = *(dim + array_size - 1);
    *(dim + array_size - 1) = *ptr;
    *ptr = temp;
}

// Console Output
for (int *ptr = dim; ptr < dim + array_size; ++ptr)
{
    cout << *ptr << ' ';
}
delete[] dim;

【讨论】:

  • 好的,但是如果我想更改数组本身(使其成为指针符号)该怎么办?
  • @ideasia 我不明白这个问题。使数组成为指针表示法是什么意思?
  • 我想在堆分配中实现它,但我认为不需要
  • @ideasia 如果您尝试使用动态分配,那么肯定是大小导致了问题。实际上,您不能在指针上使用 sizeof 来获取它所指向的数组的长度。检查这些线程:stackoverflow.com/questions/8269048/…stackoverflow.com/questions/5126353/…
  • 使用静态内存分配与动态内存分配以及使用数组表示法与指针表示法完全不相关,并且是两个不同的问题。如果有帮助,我可以更改我对动态内存分配的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多