标签: pointers

为什么C++使用指针?

为什么C++需要和使用指针?我知道他们为语言增添了力量,但是对于初学者来说,这让他们更难理解.像F#,Java,Ruby,Python,Lua等语言在没有它们的情况下就可以了,并且它们非常强大.

c++ pointers

12
推荐指数
6
解决办法
8167
查看次数

取消引用整数数组的指针

我有一个指向10的整数数组的指针.取消引用这个指针应该给我什么?

例如:

#include<stdio.h>

main()
{
    int var[10] = {1,2,3,4,5,6,7,8,9,10};
    int (*ptr) [10] = &var;

    printf("value = %u %u\n",*ptr,ptr);  //both print 2359104. Shouldn't *ptr print 1?


}
Run Code Online (Sandbox Code Playgroud)

c pointers

12
推荐指数
2
解决办法
3万
查看次数

std ::函数的向量

我想要一个std :: vector来包含一些函数,并且可以实时添加更多函数.所有函数都有这样的原型:

void name(SDL_Event*event);

我知道如何创建一个函数数组,但是如何创建一个std :: vector函数?我试过这个:

std::vector<( *)( SDL_Event *)> functions;

std::vector<( *f)( SDL_Event *)> functions;

std::vector<void> functions;

std::vector<void*> functions;
Run Code Online (Sandbox Code Playgroud)

但它们都没有奏效.请帮忙

c++ pointers function stdvector

12
推荐指数
2
解决办法
1万
查看次数

如果我有一个void指针,我该如何将int放入其中?

我有一个任意值的数组,所以我将它定义为一个void指针数组,所以我可以指向任何类型的信息(如int字符数组等).但是,我如何实际分配int给它?

以这些初始化为例:

void* data[10];
int x = 100;
Run Code Online (Sandbox Code Playgroud)

我的直觉会想到这一点,但这会产生编译错误:

data[0] = malloc(sizeof(int));
*(data[0]) = x;
Run Code Online (Sandbox Code Playgroud)

我也考虑过使用&x,但我会考虑一个局部变量的地址,这个(据我的理解)将在退出程序后被清除.所以,如果我有一个局部变量x,我如何正确地将它变为void指针类型的变量?

c pointers void-pointers

12
推荐指数
2
解决办法
2万
查看次数

C#:使用泛型来创建指针数组

下午所有,

如果你愿意,请帮助一下.为了规避.NET中的2Gb对象限制,我创建了一个在堆上分配内存的类,这允许我创建最大可达RAM空间的数组.但是,为了便于开发(因为它是一个概念证明),它很难编写.现在它工作了我一直在尝试改变代码使用泛型,所以我可以使用相同的代码多种类型.

在分配内存并正确索引数组时,我需要一个与数组相同类型的指针数组,即需要长数组long*[] myLargeArray.问题是当我使用泛型这个声明变成时T*[] myLargeArray,它总是产生错误'不能取地址,获取大小,或者声明一个指向托管类型的指针('T')'

提前致谢.

PS在任何人问之前,是的,我确实需要这么大的阵列.

2D数组的代码示例:


    LargeArray <int> myArray = new LargeArray<int>(x, y);

    public unsafe class LargeArray where T : struct
    {
        ...
        private T*[] tArr;
        ...
        public LargeArray(long sizeI, long sizeJ)
        {
            ...
            myLargeArray = new T*[sizeI];
            ...
        }
    }

Run Code Online (Sandbox Code Playgroud)

c# generics pointers

12
推荐指数
2
解决办法
2707
查看次数

C#:将指针类型用作字段?

在C#中,可以声明一个具有指针类型成员的结构(或类),如下所示:

unsafe struct Node
{
  public Node* NextNode;
}
Run Code Online (Sandbox Code Playgroud)

它是否安全(错误......忽略了那个具有讽刺意味的unsafe小旗......)使用这种结构?我的意思是在堆上长期存储.根据我的理解,GC可以自由移动,当它更新对已被移动的内容的引用时,它是否也更新了指针?我猜不是,这会使这种结构非常不安全,对吧?

我确信这样做有更好的选择,但称之为病态的好奇心.

编辑:似乎有些混乱.我知道这不是一个伟大的结构,我纯粹想知道这是否是一个安全的结构,即:指针保证指向你最初指向它的东西?

原始C代码用于遍历树(深度优先)而不递归,其中树存储在数组中.然后通过递增指针遍历数组,除非满足某个条件,然后将指针设置为NextNode,其中遍历继续.当然,在C#中也可以通过以下方式实现:

struct Node
{
  public int NextNode;
  ... // other fields
}
Run Code Online (Sandbox Code Playgroud)

其中int是下一个节点的数组中的索引.但出于性能原因,我最终会摆弄指针和fixed数组以避免边界检查,而原始的C代码似乎更自然.

c# pointers unsafe

12
推荐指数
1
解决办法
2467
查看次数

Haskell中的指针相等?

Haskell中是否存在指针质量的概念?==要求事物得到Eq,并且我有一些东西包含(值 - > IO值),而且 - >和IO都没有得到Eq.

编辑:我创建了这另一种语言翻译确实有指针相等,所以我想,同时仍然能够使用Haskell函数模型关闭模型此行为.

编辑:示例:我想要一个special能够执行此操作的函数:

> let x a = a * 2
> let y = x
> special x y
True
> let z a = a * 2
> special x z
False
Run Code Online (Sandbox Code Playgroud)

comparison haskell pointers equality

12
推荐指数
3
解决办法
2750
查看次数

如何在C++中分配2D指针数组

我正在尝试使指针指向2D数组指针.什么是语法以及如何访问元素?

c++ pointers allocation multidimensional-array

12
推荐指数
3
解决办法
5万
查看次数

C++:auto_ptr +转发声明?

我有一个这样的课:

class Inner;

class Cont
{
public:
    Cont();
    virtual ~Cont();
private:
    Inner* m_inner;
};
Run Code Online (Sandbox Code Playgroud)

在.cpp中,构造函数创建了一个Innerwith new和析构函数delete的实例.这工作得很好.
现在我想更改此代码以便使用,auto_ptr所以我写道:

class Inner;

class Cont
{
public:
    Cont();
    virtual ~Cont();
private:
    std::auto_ptr<Inner> m_inner;
};
Run Code Online (Sandbox Code Playgroud)

现在,构造函数初始化了auto_ptr,而析构函数什么都不做.

但它不起作用.当我实例化这个类时,问题似乎就出现了.我收到这个警告:

警告C4150:删除指向不完整类型'Inner'的指针; 没有破坏者叫

好吧,这显然非常糟糕,我明白为什么会发生这种情况,编译器不知道Inner实例化模板的时候auto_ptr<Inner>

所以我的问题:是否有一种方法可以使用auto_ptr前向声明,就像我在仅使用普通指针的版本中所做的那样?我
必须向#include每个班级宣布一个指针是一个巨大的麻烦,有时候,这是不可能的.这个问题通常是如何处理的?

c++ pointers memory-management auto-ptr shared-ptr

12
推荐指数
1
解决办法
4302
查看次数

C#Endian敏感吗?

例如,C#是否会以Endian敏感,代码如下:

int a = 1234567;
short b = *(short*)&i;
Run Code Online (Sandbox Code Playgroud)

始终为b分配相同的值.如果是这样,那将是什么价值?

如果没有,如果带有指针的代码,有什么好方法可以处理字节序?

c# pointers endianness

12
推荐指数
2
解决办法
1293
查看次数