中指针C ++数组

在C ++中,如果我想要一个指针数组,这样我可以有他们指向不同的对象,在后期是什么语法样子。

编辑

我要澄清一下,我试图做我猜。 我有一个类Foo有,并添加方法。 在add方法我需要引用类的吧。 我想保存参考到酒吧的一个指针数组。 指针棒阵列将需要所有的时间这我没有问题,要进行扩展。 它是对指针的堆创建和阵列,这样我以后可能会分配条形码对象,给他们。 我曾尝试似乎失败,因为类栏不会有一个默认的构造函数,编译器抱怨。 这使我认为,我是创造和我不想做实际的对象数组。

请没有STL,没有,我不想听你怎么认为这是疯狂等那就是你的意见。

任何帮助是极大的赞赏。

--------------解决方案-------------

你想要的是:

Foo *array[10]; // array of 10 Foo pointers

为了不被混淆:

Foo (*array)[10]; // pointer to array of 10 Foos

在这两种情况下,没有什么会被自动初始化,因为这些代表的指针,尚未被分配到的东西FOOS(例如,使用新)。

我终于“得到”指针/数组声明的语法在C中时,我意识到,它描述了如何访问的基本类型。 Foo *array[5][10];意味着*array[0..4][0..9]下标5项的数组,然后下标10项的数组,然后解引用一个指针)将访问Foo对象(注意[]的优先级高于*

这似乎倒退。 你可能会认为int array[5][10];又名int (array[5])[10];为10的数组int array[5] 假如是这样的话。 然后你会说访问数组的最后一个元素array[9][4] 难道这不是向后看吗? 因为一个C数组声明是利用数组没有被flipflopped图案指示如何让基本类型(而不是数组表达式的组成像人们所预料的),数组声明和代码。

例如,如果你想要的数组int指针将是int* a[10] 这意味着该变量a是10集int*秒。

编辑

我想这是你想要做什么:

class Bar
{
};

class Foo
{
public:

//Takes number of bar elements in the pointer array
Foo(int size_in);

~Foo();
void add(Bar& bar);
private:

//Pointer to bar array
Bar** m_pBarArr;

//Current fee bar index
int m_index;
};

Foo::Foo(int size_in) : m_index(0)
{
//Allocate memory for the array of bar pointers
m_pBarArr = new Bar*[size_in];
}

Foo::~Foo()
{
//Notice delete[] and not delete
delete[] m_pBarArr;
m_pBarArr = NULL;
}

void Foo::add(Bar &bar)
{
//Store the pointer into the array.
//This is dangerous, you are assuming that bar object
//is valid even when you try to use it
m_pBarArr[m_index++] = &bar;
}

我会做这些方针的东西:

class Foo{
...
};

int main(){
Foo* arrayOfFoo[100]; //[1]

arrayOfFoo[0] = new Foo; //[2]
}

[1]这使得100指针美孚对象的数组。 但是,没有富对象被创建实际创建。

[2]这是实例化对象的一种可能的方式,并在同一时间的指针保存到该对象中的阵列的第一位置。

如果不使用STL,则该代码看上去有点像C.

#include <cstdlib>
#include <new>

template< class T >
void append_to_array( T *&arr, size_t &n, T const &obj ) {
T *tmp = static_cast<T*>( std::realloc( arr, sizeof(T) * (n+1) ) );
if ( tmp == NULL ) throw std::bad_alloc( __FUNCTION__ );
// assign things now that there is no exception
arr = tmp;
new( &arr[ n ] ) T( obj ); // placement new
++ n;
}

T可以是任何POD类型,包括指针。

需要注意的是arr必须由被分配malloc没有new[]

提高:ptr_array

http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/ptr_array.html

分类:C# 时间:2012-01-01 人气:0
本文关键词: C#中,数组,指针
分享到:

相关文章

  • 我怎样才能得到一个数组的大小从在C中的指针? 2012-08-19

    我分配了一个"阵列mystruct大小n是这样的: if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) { /* handle error */ } 后来,我只能访问p并不再有n 有没有一种方法来确定只给定指针数组的长度p 我想,这一定是可能的,因为free(p)做到了这一点. 我知道malloc()跟踪的多少内存分配给它的,这就是为什么它知道的长度; 也许有一种方法来查询这些信息? 就像是... int length = askMa

  • 是数组名在C中的指针? 2013-08-12

    是一个数组的名字在C中的指针? 如果没有,什么是一个数组的名字和指针变量的区别? --------------解决方案------------- 阵列是一个数组和一个指针是一个指针,但在大多数情况下,阵列名称转换为指针. 经常使用的术语是它们衰变为指针. 下面是一个数组: int a[7]; 一个包含空格七个整数,你可以把一个价值在其中的一个与分配,是这样的: a[3] = 9; 这里是一个指针: int *p; p没有包含任何空格的整数,但它可以指向一个整数的空间. 例如,我们可以将其设置为指

  • 堆中分配的二维数组(数组指针不中) 2014-07-06

    我写的C代码,我想堆上分配512 * 256字节. 对于我自己的方便,我想能够访问与语法数组中的元素[A] [B]. 没有算术找到合适的索引. 每个教程中,我在网上看到告诉我,创建指向我想在我的数组行的数组指针数组. 这意味着,每个子阵列需要被malloc分配并单独free'd. 我感兴趣的是,只需要调用一次malloc和一个呼叫免费的解决方案.(因此,所有的元素都是连续的),我认为这是可能的,因为我不会构建一个锯齿形数组. 我将不胜感激,如果任何人都可以共享语法声明这样的一个数组. -----

  • Modifiying函数内部数组指针 2012-03-21

    void nothing(int* buffer) { int* temp = new int[5]; for (int i = 0; i < 5; i++) { temp[i] = i; } buffer = temp; } void main(int argc, char* argv[]) { int* a = new int; nothing(a); for (int i = 0; i < 5; i++) { cout << a[i] << endl; } sys

  • 参考在Ruby中数组单元? 2012-04-22

    我要在Ruby中数组单元格的引用? 在C ++中,我可以这样做: int& ref = arr[x][y]; 后来与变量来ref ,而无需输入全部的arr[x][y] 我想这样做,因为我需要一个全功能(我做的memoization),并输入不必要的索引只能导致错误访问同一个小区多次. --------------解决方案------------- 在Ruby中的所有值都是引用,所以这当然是可能的,但也有一些重要的限制. 一个需要注意的是,红宝石并不直接支持多维数组,但你可以实现一个作为数组的数组

  • 在C /目标C数组指针 2012-07-07

    我有在C /目标C数组指针的问题. 当我执行我的代码,我得到一个坏的访问错误消息. 我明确了该崩溃的应用程序的声明: unsigned char *image[640][480][4]; 如果我改变了语句: unsigned char *image[640][10][4]; 该程序不会崩溃. 这种说法崩溃的应用程序,以及: unsigned char *bla[1000][180]; 任何想法,为什么数组的大小导致发生崩溃? 这仅仅是一个数组指针的声明. 我运行的Xcode 4.2.1 IOS

  • C ++:什么是场景中使用指针是个“好主意”(TM)? 2012-08-13

    可能重复: 常见的用途指针? 我仍然在学习C的基础知识+ +,但我已经知道如何做有用的小程序. 我理解指针的概念,我在教程看到的例子道理给我. 然而,在实际操作层面,并成为一个(前)PHP开发人员,我还没有自信到实际使用他们在我的节目. 事实上,到目前为止,我还没有感到有必要使用任何指针. 我有我的类和函数,我似乎在做完全正常,而无需使用任何指针(更不用说指针的指针). 我不禁感到几分得意的我的小程序. 不过,我知道,我很想念在C ++的最重要的特征之一,一个双刃剑之一:指针和内存管理,可以制造

  • 为什么调试显示来自我的数组指针只有一个元素? 2012-10-26

    第一关:我知道, new是这样做的C ++的方式. 我只是表明有重现此错误的方法不止一种,无一不是非常令人沮丧. 我有两种形式这个源文件. 我想还没有调试另一个编程任务,但我不要求上的帮助. 基本上,我试图重新实现set与大小和一个指向域类int数组. 下面是使用代码new : testnew.cpp int main() { int size = 1; int *elements = new int[size]; elements[0] = 0; size++; int * temp = ne

  • 正在发生的事情,在这个片段中的指针? 2013-07-24

    我很好奇,为什么这是一个错误,什么错误信息的意思. 下面是一些代码: int *x[] = {"foo", "bar", "baz"}; int *y[] = {"foo", "bar", "baz"}; x = y; 我尝试编译,我得到这样的: error: incompatible types when assigning to type ‘char *[3]’ from t

  • 有人可以澄清这个数组/指针想法给我吗? 2014-03-21

    在试图解释,数组只是指针(在C ++中)我们班,我的教授向我们展示了这一点: array[5] // cout'ing this *(array + 5) // would return the same value as this 我完全有一个小麻烦了解它. 这里是我的想法: array是第一位置的地址,所以如果我们添加5到该地址,我们在存储器移动5个地址. 指针操作者拉动从存储器位置的数据. 这是正确的想法? 这个想法仍然感觉云里雾里我,只是觉得我不完全理解它. 我觉得听别人解释它可能会帮助

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.843 (s). 10 q(s)