标签: pointers

如何使用迭代器?

我正在计算两点之间的距离.我用C++中的向量存储的两点:(0,0)和(1,1).

我应该得到结果

0
1.4
1.4
0
Run Code Online (Sandbox Code Playgroud)

但我得到的实际结果是

0
1
-1
0
Run Code Online (Sandbox Code Playgroud)

我认为在向量中使用迭代器的方式有问题.我该如何解决这个问题?

我发布了以下代码.

typedef struct point {
    float x;
    float y;
} point;

float distance(point *p1, point *p2)
{
    return sqrt((p1->x - p2->x)*(p1->x - p2->x) +
                (p1->y - p2->y)*(p1->y - p2->y));
}

int main()
{
    vector <point> po;
    point p1; p1.x = 0; p1.y = 0;
    point p2; p2.x = 1; p2.y = 1;
    po.push_back(p1);
    po.push_back(p2);

    vector <point>::iterator ii;
    vector <point>::iterator jj;
    for (ii = po.begin(); ii != po.end(); ii++) …
Run Code Online (Sandbox Code Playgroud)

c++ pointers iterator vector using-statement

71
推荐指数
3
解决办法
4万
查看次数

为什么在C和C++中对NULL指针的定义不同?

在C中,NULL定义为(void *)0在C++中它是0.为什么会这样?在CI中可以理解,如果NULL不是类型转换,(void *)则编译器可能/可能不会生成警告.除此之外,有什么理由吗?

c c++ null pointers

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

在Java中复制对象

我了解到,当您在Java中修改变量时,它不会更改它所基于的变量

int a = new Integer(5);
int b = a;
b = b + b;
System.out.println(a); // 5 as expected
System.out.println(b); // 10 as expected
Run Code Online (Sandbox Code Playgroud)

我假设对象有类似的东西.考虑这个课程.

public class SomeObject {
    public String text;

    public SomeObject(String text) {
        this.setText(text);
    }

    public String getText() {
        return text;
    }   

    public void setText(String text) {
        this.text = text;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我尝试这段代码后,我感到困惑.

SomeObject s1 = new SomeObject("first");
SomeObject s2 = s1;
s2.setText("second");
System.out.println(s1.getText()); // second as UNexpected
System.out.println(s2.getText()); // second as expected
Run Code Online (Sandbox Code Playgroud)

请向我解释为什么更改任何对象会影响另一个对象.我知道变量文本的值存储在两个对象的内存中的相同位置.

为什么变量的值是独立的但与对象相关?

另外,如果简单的赋值不能完成工作,如何复制SomeObject?

java variables pointers reference object

71
推荐指数
4
解决办法
5万
查看次数

指针值不同但它们相等.为什么?

一个简短的例子输出一个奇怪的结果!

#include <iostream>

using namespace std;

struct A { int a; };    
struct B { int b; };
struct C : A, B
{
    int c;
};

int main()
{
    C* c = new C;
    B* b = c;

    cout << "The address of b is 0x" << hex << b << endl;
    cout << "The address of c is 0x" << hex << c << endl;

    if (b == c)
    {
        cout << "b is equal to c" << …
Run Code Online (Sandbox Code Playgroud)

c++ pointers multiple-inheritance

71
推荐指数
4
解决办法
9336
查看次数

"<type>是指向接口的指针,而不是接口"混乱

亲爱的开发者,

我有这个问题,这对我来说似乎有点奇怪.看一下这段代码:

package coreinterfaces

type FilterInterface interface {
    Filter(s *string) bool
}

type FieldFilter struct {
    Key string
    Val string
}

func (ff *FieldFilter) Filter(s *string) bool {
    // Some code
}

type FilterMapInterface interface {
    AddFilter(f *FilterInterface) uuid.UUID     
    RemoveFilter(i uuid.UUID)                   
    GetFilterByID(i uuid.UUID) *FilterInterface
}

type FilterMap struct {
    mutex   sync.Mutex
    Filters map[uuid.UUID]FilterInterface
}

func (fp *FilterMap) AddFilter(f *FilterInterface) uuid.UUID {
    // Some code
}

func (fp *FilterMap) RemoveFilter(i uuid.UUID) {
    // Some code
}

func (fp *FilterMap) GetFilterByID(i uuid.UUID) …
Run Code Online (Sandbox Code Playgroud)

pointers interface go

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

什么时候在C#/ .NET中使用指针?

我知道C#为程序员提供了访问的能力,在不安全的上下文中使用指针.但什么时候需要呢?

在什么情况下,使用指针变得不可避免?

是出于性能原因吗?

另外,为什么C#会通过不安全的上下文公开此功能,并从中删除所有托管优势?从理论上讲,是否可以使用指针而不会失去托管环境的任何优势?

.net c# performance pointers unsafe

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

在C中释放NULL指针是一种好习惯吗?

可能重复:
ptr为NULL的free(ptr)是否会损坏内存?

我正在编写一个C函数,如果它被malloc()编辑,它将释放一个指针.指针可以是NULL(在发生错误并且代码没有机会分配任何内容的情况下)或分配malloc().使用安全free(ptr);而不是if (ptr != NULL) free(ptr);

gcc即使有-Wall -Wextra -ansi -pedantic,也不会抱怨,但这是好的做法吗?

c pointers memory-management

70
推荐指数
3
解决办法
6万
查看次数

比较悬空指针是否合法?

比较悬空指针是否合法?

int *p, *q;
{
    int a;
    p = &a;
}
{
    int b;
    q = &b;
}
std::cout << (p == q) << '\n';
Run Code Online (Sandbox Code Playgroud)

注意如何既pq点有对象已经消失了.这合法吗?

c++ pointers language-lawyer dangling-pointer

70
推荐指数
1
解决办法
2392
查看次数

检查指针是否已分配内存

我们可以检查传递给函数的指针是否在C中分配了内存?

我在C中使用了自己的函数,它接受了一个字符指针 - buf [指向缓冲区的指针]和大小 - buf_siz [缓冲区大小].实际上在调用此函数之前,用户必须创建一个缓冲区并为其分配buf_siz的内存.

由于用户可能忘记进行内存分配并只是将指针传递给我的函数,我想检查一下.那么有什么方法可以检查我的函数,看看传递的指针是否真的分配了buf_siz的内存量.??

编辑1:似乎没有标准库来检查它..但是有任何脏的黑客来检查它.. ??

编辑2:我知道我的功能将由一个优秀的C程序员使用...但我想知道我们是否可以检查..如果我们可以,我想听听它...

结论:因此无法检查特定指针是否在函数内分配了内存

c pointers

68
推荐指数
6
解决办法
7万
查看次数

通过JNI传递C和Java之间的指针

目前,我正在尝试创建一个使用CUDA功能的Java应用程序.CUDA和Java之间的连接工作正常,但我有另一个问题,想问一下,如果我的想法是正确的.

当我从Java调用本机函数时,我将一些数据传递给它,函数计算一些东西并返回结果.是否有可能让第一个函数返回一个引用(指针)到这个结果,我可以传递给JNI并调用另一个用结果进行进一步计算的函数?

我的想法是通过将数据保留在GPU内存中并只是传递对它的引用来减少从GPU复制数据所带来的开销,以便其他函数可以使用它.

经过一段时间的尝试,我想,这应该是不可能的,因为指针在应用程序结束后被删除(在这种情况下,当C函数终止时).它是否正确?或者我只是在C中看到解决方案?

编辑:嗯,稍微扩展问题(或使其更清楚):当函数结束时,JNI本机函数分配的内存是否已释放?或者我可以访问它,直到JNI应用程序结束或我手动释放它?

感谢您的输入 :)

java java-native-interface pointers cuda

68
推荐指数
6
解决办法
5万
查看次数