我正在计算两点之间的距离.我用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中,NULL定义为(void *)0在C++中它是0.为什么会这样?在CI中可以理解,如果NULL不是类型转换,(void *)则编译器可能/可能不会生成警告.除此之外,有什么理由吗?
我了解到,当您在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?
一个简短的例子输出一个奇怪的结果!
#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) 亲爱的开发者,
我有这个问题,这对我来说似乎有点奇怪.看一下这段代码:
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) 我知道C#为程序员提供了访问的能力,在不安全的上下文中使用指针.但什么时候需要呢?
在什么情况下,使用指针变得不可避免?
是出于性能原因吗?
另外,为什么C#会通过不安全的上下文公开此功能,并从中删除所有托管优势?从理论上讲,是否可以使用指针而不会失去托管环境的任何优势?
我正在编写一个C函数,如果它被malloc()编辑,它将释放一个指针.指针可以是NULL(在发生错误并且代码没有机会分配任何内容的情况下)或分配malloc().使用安全free(ptr);而不是if (ptr != NULL) free(ptr);?
gcc即使有-Wall -Wextra -ansi -pedantic,也不会抱怨,但这是好的做法吗?
比较悬空指针是否合法?
int *p, *q;
{
int a;
p = &a;
}
{
int b;
q = &b;
}
std::cout << (p == q) << '\n';
Run Code Online (Sandbox Code Playgroud)
注意如何既p与q点有对象已经消失了.这合法吗?
我们可以检查传递给函数的指针是否在C中分配了内存?
我在C中使用了自己的函数,它接受了一个字符指针 - buf [指向缓冲区的指针]和大小 - buf_siz [缓冲区大小].实际上在调用此函数之前,用户必须创建一个缓冲区并为其分配buf_siz的内存.
由于用户可能忘记进行内存分配并只是将指针传递给我的函数,我想检查一下.那么有什么方法可以检查我的函数,看看传递的指针是否真的分配了buf_siz的内存量.??
编辑1:似乎没有标准库来检查它..但是有任何脏的黑客来检查它.. ??
编辑2:我知道我的功能将由一个优秀的C程序员使用...但我想知道我们是否可以检查..如果我们可以,我想听听它...
结论:因此无法检查特定指针是否在函数内分配了内存
目前,我正在尝试创建一个使用CUDA功能的Java应用程序.CUDA和Java之间的连接工作正常,但我有另一个问题,想问一下,如果我的想法是正确的.
当我从Java调用本机函数时,我将一些数据传递给它,函数计算一些东西并返回结果.是否有可能让第一个函数返回一个引用(指针)到这个结果,我可以传递给JNI并调用另一个用结果进行进一步计算的函数?
我的想法是通过将数据保留在GPU内存中并只是传递对它的引用来减少从GPU复制数据所带来的开销,以便其他函数可以使用它.
经过一段时间的尝试,我想,这应该是不可能的,因为指针在应用程序结束后被删除(在这种情况下,当C函数终止时).它是否正确?或者我只是在C中看到解决方案?
编辑:嗯,稍微扩展问题(或使其更清楚):当函数结束时,JNI本机函数分配的内存是否已释放?或者我可以访问它,直到JNI应用程序结束或我手动释放它?
感谢您的输入 :)