【问题标题】:Pointer to int array, passing and using it from another method指向 int 数组的指针,从另一个方法传递和使用它
【发布时间】:2012-04-23 15:10:26
【问题描述】:

我还没有巩固我对 C++ 数组的学习,并且忘记了如何正确地做到这一点。我之前用 char 数组完成了它,但它不适用于 int 数组。

我声明一个新的空白 int 数组:

int myIntArray[10];

所以现在这应该是一个空数组对吗?

然后我分配一个指向这个数组的指针:

int *pMyArray = myIntArray

希望那是正确的。

然后我将它传递给其他地方的另一个方法:

anotherMethod(pMyArray)

我想在哪里将此指针分配给一个局部变量(这是我真的不确定的地方):

anotherMethod(int *pMyArray){    
    int myLocalArray[];    
    myLocalArray[0] = *pMyArray;    
}

我没有收到任何编译错误,但我不确定这在某些方面是否正确。对此表示赞赏的任何和所有帮助和建议。

编辑:

我应该说我想做的事。

真的很简单,我只想用另一种方法修改本地数组。

所以我有:

方法 1 将包含:

int myArray1[10] = {0};

方法 2 将传递指向 myArray 的指针:

然后是一些代码来修改数组myArray中的变量。

【问题讨论】:

  • 使用std::vector<int> 可以解决所有问题。
  • 一些测试代码可以帮助你弄清楚。不要依赖“知识”。测试一下!
  • 如果您没有收到此程序的编译错误,那么您应该打开它们。在 GCC 中,这是 g++ -Wall。或者,更好的是-Wall -Werror
  • -Wall 并不是真正的“全部”,您应该使用-Wall -Wextra(但不要使用像-pedantic 这样的愚蠢选项,见鬼!)。

标签: c++


【解决方案1】:
int myIntArray[10];

这是一个未初始化的数组。它不一定包含0's。

int *pMyArray = myIntArray

好的,pMyArray 指向myIntArray 中的第一个元素。

anotherMethod(int *pMyArray){    
    int myLocalArray[10];    
    myLocalArray[0] = *pMyArray;    
}

这不会将您的指针分配给任何东西,它会将本地数组的第一个值分配给pMyArray 指向的int,记住,它是未初始化的。我在那里添加了10,因为你不能在 C++ 中拥有一个未知大小的数组。

要修改pMyArray指向的内容,需要通过引用传递:

anotherMethod(int *& pMyArray)

另外,如果您将其分配给自动存储中的某些值,则会导致未定义的行为,因为该内存在函数退出时不再有效。

【讨论】:

    【解决方案2】:
    int myIntArray[10];
    

    所以现在这应该是一个空数组对吗?

    不,这是一个 10 整数数组,其中包含取决于存储规范的值。
    如果在本地创建,它具有随机垃圾值。
    如果在全局范围内创建,它是初始化值,对于 POD 初始化为零。

    此外,您的方法只是将本地数组分配给您传递的数组的第一个值。
    你到底想做什么?我不确定。

    【讨论】:

      【解决方案3】:
      int myIntArray[10];
      So this should be an array of nulls for the moment correct?
      

      不正确,它是一个包含 10 个未初始化整数的数组。

      int *pMyArray = myIntArray
      Hopefully thats correct to there.
      

      不太正确,pMyArray 是指向第一个元素 myIntArray[0] 的指针。

      我想将此指针分配给局部变量的位置(这是 我真的不确定):

      如果你真的需要分配指针,你必须使用这段代码

      int *p_myLocalArray;    
      p_myLocalArray = pMyArray; 
      

      【讨论】:

        【解决方案4】:

        这里有一些错误。

        首先,零数组(非空)是通过使用初始化语法实现的:

        int myIntArray[10] = {0};

        其次,int myLocalArray[]; 的大小为 0。即使它的大小为 10,写入 myLocalArray[0] = *pMyArray; 也会将 pMyArray 中的第一个 int 分配给 mLocalArray,这不是你是说。

        如果要分配数组的指针,那么简单:

        int *myLocalPointer;
        myLocalPointer = pMyArray;
        

        如果您想要数组的本地副本,则需要将其复制到本地,为此您还需要大小和动态分配:

        void anotherMethod(int *pMyArray, int size){    
            int *myLocalArray = (int *)malloc(size * sizeof(int));
            memcpy(myLocalArray, pMyArray, size * sizeof(int));
        
            ...
            free(myLocalArray);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-03
          • 1970-01-01
          • 2021-02-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多