2016-01-08 33 views
0

我想在C++中指向一個數組,有可能嗎?在C++中指向一個數組?

我的主要代碼:

#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.h

#pragma once 
static class ArrayPointerClass 
{ 
public: 
    ArrayPointerClass(); 
    ~ArrayPointerClass(); 
    static void pointingArray(float* arr[2]); 
}; 

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指針陣列

我知道在C++數組中,不允許定義長度的數組。這是原因嗎?

感謝您的支持

+2

您不能分配到C數組如果這是你的意圖。 'std :: array'工作得更好,指針和參考語法就像正常一樣。 – chris

+0

使用'std :: vector'。這就是它的目的。 –

+0

這個代碼中沒有任何答案(當前)提到的一個問題是你的第一個錯誤的來源:你在'stdafx.h',VC++的預編譯頭文件(PCH)之前包含'ArrayPointerClass.h'。當它解析PCH時,它會跳過所有內容,包括'stdafx.h',導致你的'ArrayPointerClass.h'頭被跳過並且不包含在內,這會產生你的問題中報告的錯誤。 – 1201ProgramAlarm

回答

1

* arr = newArray;將無法工作,你不能複製這樣的C數組。 你可以做memcpy()或std :: copy()like;

memcpy(newArray, arr, 2); 

std::copy(newArray, newArray+2, arr); 
1

無法在C++中創建靜態類。 static關鍵字可以應用於對象和函數。 而每個數組名稱是一個指針。因此下標不能在參數中給出。提供指針類型就足夠了。

其中工程修改後的代碼:

#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; 
} 
+0

在你的例子中,「newArray [2]」在堆棧中創建。它將在指向陣列函數結束時被銷燬。並且因爲「arr」將被分配懸掛指針。 –

-2

感謝大家對你的答案(甚至有部分工作) 我發現我自己的解決方案

// 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; 
} 
+3

您正在分配「a」,但您不是通過刪除來釋放它。這會導致您在大型項目中遇到麻煩。 –

+0

CANT ASN ANYMORE QUESTIONS ....編程是我的生活,我可以問沒有更多的幫助,爲什麼??????????????? – sachaamm

+0

如果您使用本網站作爲幫助網站,那麼您錯誤地使用了它。這不是一個幫助網站,而是一個問答庫,這是一個很大的區別。 –