指向数组元素

时间:2012-12-17 17:00:37

标签: c# arrays pointers

我想要实现的是说我有一个数组,我希望能够通过指向它来修改整个代码中的特定数组元素。

例如在C ++中我可以这样做

int main(){
 int arr [5]= {1,2,3,4,5};
 int *c = &arr[3];
 cout << arr[3] <<endl;
 *c = 0;
 cout << arr[3]<<endl;
}

我做了一些谷歌搜索,似乎有办法通过“不安全”来做到这一点,但我真的不想走那条路。

我想我可以创建一个变量来存储索引,但实际上我处理的是复杂性稍高(列表中的列表。所以有两个索引变量似乎会增加代码的复杂性。)

C#有一个数据绑定类,所以我现在正在做的是将数组元素绑定到一个文本框(我已经隐藏)并在我想修改特定的数组元素时修改该文本框,但这也不是一个好的解决方案(因为我有一个没有用于其预期用途的文本框 - 有点误导)。

4 个答案:

答案 0 :(得分:2)

您希望使用外观的C#示例会有所帮助。如果我明白你在问什么,像这样的简单课程可能会这样做。你问的是什么,似乎不是一个好主意。如果你展示了你需要的更大的范围,有人可能会指出一个更好的设计,你完全不需要这种功能。

public class ListElement<T> {
    private IList<T> list;
    private int index;
    public ListElement(IList<T> list, int index) {
        this.list = list;
        this.index = index;
    }
    public T Value {
        get {
            return list[index];
        }
        set {
            list[index] = value;
        }
    }
}

使用它看起来像

int[] arr = new int[] {1,2,3,4,5};
ListElement<int> third = new ListElement<int>(arr, 2);
Console.WriteLine(third.Value);
third.Value = 0;
Console.WriteLine(third.Value);

答案 1 :(得分:0)

我不确定这是否完全符合,但问题是这些指针在c#中是不可能的。

如果您有更复杂的列表,可以查看LinkedList<T> 如果要更改列表中的元素,它会提供高效的方法。

答案 2 :(得分:0)

我想出了一个C#的解决方案。虽然这是关闭袖口,所以它可能无法在所有情况下工作,但我确实测试了你的情况。

class Wrapper<T>
{
    private T[] array;
    private T item;
    private int index;
    public T Item { get { return item; } set { item = value;
        array[Index] = value;
    } }

    public int Index
    {
        get { return index; }
        set
        {
            index = value;
            Item = array[value];

        }    
    }

    public Wrapper(T[] arr)
    {
        array = arr;
    }

}

然后你可以使用这样的类:

    class Program
{
    static void Main(string[] args)
    {
        int[] i = {1, 2, 3, 4, 5};
        i.ToList().ForEach(x => Console.WriteLine(x));
        Wrapper<int> w = new Wrapper<int>(i);
        w.Index = 2;
        w.Item = 5;


        i.ToList().ForEach(x => Console.WriteLine(x));
        Console.ReadLine();
    }
}

这将给出输出:1234512545

它不像C ++中的解决方案那么漂亮,但它可以按照您的需要工作,并提供引用该阵列的更“自动”版本。

答案 3 :(得分:0)

我会将你的数组包装在Objects中。在C#中,需要指针操作的东西通常最好用对象完成。

优点是对象允许更清晰的命名和访问更复杂的数据结构。你是对的,传递一组索引是不理想的 - 排序和索引很容易混淆。事实上,我认为是你所在的人决定面向对象编程是一个好主意!!

所以你有class MyArray { },可以像使用指针那样使用'对象引用', 另外,您可以创建MyArray[]的数组。