Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组指向c++;? 我想用C++来表示数组,有可能吗?_C++_Arrays_Pointers_Static - Fatal编程技术网

将数组指向c++;? 我想用C++来表示数组,有可能吗?

将数组指向c++;? 我想用C++来表示数组,有可能吗?,c++,arrays,pointers,static,C++,Arrays,Pointers,Static,我的主要代码: #include "ArrayPointerClass.h" #include "stdafx.h" #include <iostream> #include <string> int _tmain(int argc, _TCHAR* argv[]) { float arr[2]; ArrayPointerClass::pointingArray(&arr); return 0; } ArrayPointerCla

我的主要代码:

#include "ArrayPointerClass.h"

#include "stdafx.h"
#include <iostream>
#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
    float arr[2];

    ArrayPointerClass::pointingArray(&arr);

    return 0;
}
ArrayPointerClass.cpp

#include "stdafx.h"
#include "ArrayPointerClass.h"


ArrayPointerClass::ArrayPointerClass()
{
}


ArrayPointerClass::~ArrayPointerClass()
{
}

void ArrayPointerClass::pointingArray(float* arr[2]){

    float newArray[2] = { 2.2f, 2.2f };
    *arr = newArray;

}
我有一个错误: 错误3错误C2653:“ArrayPointerClass”:不是类或命名空间名称c:\users\alex\documents\visual studio 2013\projects\pointerarray\pointerarray\pointerarray.cpp 13 1 pointerarray

错误3错误C3861:“pointingArray”:找不到标识符c:\users\alex\documents\visual studio 2013\projects\pointerarray\pointerarray\pointerarray.cpp 13 1 pointerarray

我知道C++的数组中,不允许长度没有定义的数组。这是原因吗


感谢您的支持

*arr=newArray;不起作用你不能像那样复制一个C数组。 您可以像这样执行memcpy()或std::copy()


< >在C++中没有创建静态类的方法。strong>静态关键字可应用于对象和函数。 每个数组名都是一个指针。因此,参数中不能给出下标。提供指针类型就足够了

修改后的代码有效:

#include <iostream>
#include <string>
using namespace std;


class ArrayPointerClass
{
 public:
 ArrayPointerClass();
 ~ArrayPointerClass();
 static void pointingArray(float* arr);
};

ArrayPointerClass::ArrayPointerClass()
{
}

ArrayPointerClass::~ArrayPointerClass()
{
}

 void ArrayPointerClass::pointingArray(float* arr){

 float newArray[2] = { 2.2f, 2.2f };
 arr = newArray;

}


int main()
{
  float arr[2];

  ArrayPointerClass obj;
  obj.pointingArray(arr);

  return 0;
}
#包括
#包括
使用名称空间std;
类ArrayPointerClass
{
公众:
ArrayPointerClass();
~ArrayPointerClass();
静态空隙点阵列(浮动*阵列);
};
ArrayPointerClass::ArrayPointerClass()
{
}
ArrayPointerClass::~ArrayPointerClass()
{
}
void ArrayPointerClass::pointingArray(float*arr){
float newArray[2]={2.2f,2.2f};
arr=newArray;
}
int main()
{
浮动arr[2];
阵列指针类obj;
目标指向阵列(arr);
返回0;
}

谢谢大家的回答(即使有部分工作) 我找到了一个解决办法

// PointerArray.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;



int* test() {

    int size_needed = 2;

    int* a = new int[size_needed];
    a[0] = 0;
    a[1] = 0;

    return a;
}


int main()
{
    //int arr[2] = { 1, 1 };
    int* arr = test();


    for (int i = 0; i < 2; i++){
        cout << arr[i] << std::endl;
    }
    cin.get();
    return 0;
} 
//PointerArray.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int*test(){
int size_=2;
int*a=新的int[size_所需];
a[0]=0;
a[1]=0;
返回a;
}
int main()
{
//int-arr[2]={1,1};
int*arr=test();
对于(int i=0;i<2;i++){

如果这是您的意图,您不能分配给C数组吗。
std::array
工作得更好,指针和引用语法与正常语法一样。使用
std::vector
。这就是它的目的。此代码的一个问题(目前)不是任何答案中的地址都是第一个错误的来源:您在
stdafx.h
之前包含了
ArrayPointerClass.h
,即预编译头(PCH)对于VC++。当它解析PCH时,它将跳过所有内容,直到包含
stdafx.h
,导致您的
ArrayPointerClass.h
标题被跳过且未包含,这将生成您在问题中报告的错误。您正在分配“a”但你不能通过删除来解除分配它。这会在大型项目中给你带来麻烦。不能再问问题了……编程是我的生活,我不能再要求任何帮助,为什么???????????如果你将此网站用作帮助网站,你就用错了。这不是一个帮助网站,而是一个问答库,这是一个很大的不同没问题,但我不明白这个判断。不管怎样,我没有时间去解释我可怜的不公平的感觉,我会再做一个解释(附言:我讨厌这些认为自己比我优越的下行投票者,他们导致了这项禁令。我以自己的知识回答了有关Stackoverflow的问题,我让像你这样的人毫无理由地评判我,并对我的帖子进行下行投票)在你的例子“newArray[2]”是在堆栈中创建的。它将在pointingArray函数的末尾被销毁。因此,“arr”将被分配悬空指针。
#include <iostream>
#include <string>
using namespace std;


class ArrayPointerClass
{
 public:
 ArrayPointerClass();
 ~ArrayPointerClass();
 static void pointingArray(float* arr);
};

ArrayPointerClass::ArrayPointerClass()
{
}

ArrayPointerClass::~ArrayPointerClass()
{
}

 void ArrayPointerClass::pointingArray(float* arr){

 float newArray[2] = { 2.2f, 2.2f };
 arr = newArray;

}


int main()
{
  float arr[2];

  ArrayPointerClass obj;
  obj.pointingArray(arr);

  return 0;
}
// PointerArray.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;



int* test() {

    int size_needed = 2;

    int* a = new int[size_needed];
    a[0] = 0;
    a[1] = 0;

    return a;
}


int main()
{
    //int arr[2] = { 1, 1 };
    int* arr = test();


    for (int i = 0; i < 2; i++){
        cout << arr[i] << std::endl;
    }
    cin.get();
    return 0;
}