Tag: 指针

检查这是否为空

是否有意义,检查这是否为空? 说我有一个方法类; 在那个方法里面,我检查this == NULL ,如果是,返回一个错误码。 如果这是空的,那就意味着该对象被删除。 该方法甚至能够返回任何东西? 更新:我忘了提及可以从多个线程调用该方法,并可能导致该对象被删除,而另一个线程在该方法内。

在C中取消引用0的指针

有时,内存地址为0x0的数据非常有价值 – 以x86实模式IVT为例:它从0x0开始,包含指向中断处理程序的指针:0x00处的双字是指向除零error handling程序的指针。 但是,C11语言标准禁止解引用空指针[WG14 N1570 6.5.3.2],它们被定义为用0初始化的指针或用空指针初始化的指针[WG14 N1570 6.3.2.3],从而有效地禁止了第一个字节。 人们在需要时如何使用0x0?

空指针与boost :: shared_ptr?

什么是相当于以下内容: std::vector<Foo*> vec; vec.push_back(NULL); 当处理boost::shared_ptr ? 它是下面的代码? std::vector< boost::shared_ptr<Foo> > vec; vec.push_back(boost::shared_ptr<Foo>()); 注意:我可能推回很多这样的对象。 我应该在哪里声明一个全局静态的nullPtr对象? 那样只有其中一个必须被修build: boost::shared_ptr<Foo> nullPtr;

在C中,我将如何select是否返回一个结构或指针结构?

最近在我的C肌肉工作,并通过我一直在努力的许多图书馆看,当然给了我一个很好的主意,什么是好的做法。 有一件事,我没有看到是一个函数,返回一个结构: something_t make_something() { … } 从我所吸收的是这样做的“正确的”方式: something_t *make_something() { … } void destroy_something(something_t *object) { … } 代码片段2中的架构比FAR更受欢迎。所以现在我问,为什么我会直接返回一个结构,就像在代码片段1中那样? 当我在两种select之间进行select时,我应该考虑哪些差异? 此外,这个选项如何比较? void make_something(something_t *object)

指针指向int的增量值

我有一个int指针(int * count),如果我想增加指向使用++的整数,我想我会打电话 *count++; 但是,我正在构build警告“expression式结果未使用”。 我可以打电话 *count += 1; 但是,我想知道如何使用++。 有任何想法吗?

何时使用C#/ .NET中的指针?

我知道C#让程序员能够访问,在不安全的上下文中使用指针。 但是,这是什么时候需要? 在什么情况下,使用指针变得不可避免? 仅仅是出于性能的原因? 另外,为什么C#通过不安全的上下文来暴露这个function,并从中删除所有的pipe理优势? 在理论上是否可以使用指针而不会失去托pipe环境的优点?

C ++:在函数/方法声明中和号“&”和星号“*”之间的区别?

那些之间有一些微妙的区别: void a1(float &b) { b=1; }; a1(b); 和 void a1(float *b) { (*b)=1; }; a1(&b); ? 它们都是一样的(或者看起来像main()),但是第一个显然更短,但是我看到的大部分代码都使用第二个符号。 有区别吗? 也许万一它是一些对象,而不是浮动?

为什么一个指向volatile的指针,比如“volatile int * p”,有用?

volatile是告诉编译器不要优化引用,这样每个读/写操作都不使用存储在寄存器中的值,而是进行真正的内存访问。 我可以理解它对于一些普通的variables是有用的,但是不理解volatile是如何影响指针的。 volatile int *p = some_addr; int a = *p; // CPU always has to load the address, then does a memory access anyway, right? 如果它被声明为int *p = some_addr它有什么区别?

JavaScript指针/引用的疯狂。 有人可以解释这个吗?

JavaScript通过引用传递对象。 这很有道理。 但是一旦你开始操作这些对象,所有事情都会以一种看起来不直观的方式进行。 让我举个例子: var a, b; a = {} b = a; a['one'] = {}; console.log( JSON.stringify(a) ); // outputs: {"one":{}} console.log( JSON.stringify(b) ); // outputs: {"one":{}} 这一切都很好,因为现在b有一个指向b的指针,所以期望给a赋值的东西也会影响b 。 但是,如果我这样做: a = a['one']; console.log( JSON.stringify(a) ); // outputs: {} console.log( JSON.stringify(b) ); // outputs: {"one":{}} 这对我来说是令人惊讶的。 我希望a和b仍然是相同的(因为a['one']先前被设置为{}而a被设置为a['one'] )。 但事实并非如此。 当它被分配给新的东西的时候,它似乎失去了对b引用,但是b在失去对b引用之前保持了a被设置的值。 但是,如果我这样做: a['two'] = 2; […]

为什么代码会通过空指针显式调用静态方法?

我在几个旧的项目中看到过这样的代码: class Class { static void Method() {} }; ((Class*)0)->Method(); 此代码包含未定义的行为,因为它包含解引用空指针(不pipe之后会发生什么)。 这真的没有任何意义 – 在那里将types名称提供给编译器,而编写上面代码的人可以写下这个代码: Class::Method(); 后者会好的。 为什么会有人写前代码? 这是一个很好的旧时代的成语吗?