在 K&R(C 编程语言第 2 版)第 5 章中,我阅读了以下内容:
首先,在某些情况下可以比较指针。如果
p
和q
指向同一个数组的成员,则关系一样==
,!=
,<
,>=
,等正常工作。
这似乎意味着只能比较指向同一数组的指针。
但是,当我尝试此代码时
char t = 't';
char *pt = &t;
char x = 'x';
char *px = &x;
printf("%d\n", pt > px);
Run Code Online (Sandbox Code Playgroud)
1
被打印到屏幕上。
首先,我认为我会得到 undefined 或某种类型或错误,因为pt
和px
没有指向同一个数组(至少在我的理解中)。
也是pt > px
因为两个指针都指向存储在栈上的变量,栈向下增长,所以内存地址t
大于x
?为什么pt > px
是真的?
当 malloc 被引入时,我变得更加困惑。 同样在第 8.7 章的 K&R 中写到以下内容:
然而,仍然存在一种假设,即
sbrk
可以有意义地比较指向由 返回的不同块的指针。仅允许在数组内进行指针比较的标准并不能保证这一点。因此,这个版本的malloc
仅在一般指针比较有意义的机器之间是可移植的。
将指向堆上 malloced …
我注意到在 OpenCV 文档中getGaussianKernel
,sigma
是使用以下公式计算的:
sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8
Run Code Online (Sandbox Code Playgroud)
这个公式从何而来?这只是 OpenCV 作者提出的一些近似值吗?
我有 Leetcode 提供的解决方案,让我困惑的部分是将 7(或更低的值)添加到 Integer.MAX_VALUE 或将 -8(或更低的值)添加到 Integer.MIN_VALUE 不会导致溢出或下溢分别。
我的逻辑是,如果你有 Integer.MAX_VALUE,加 1 会导致溢出。如果您有 Integer.MIN_VALUE,减 1 将导致下溢。我对溢出和下溢的理解错误在哪里?
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + …
Run Code Online (Sandbox Code Playgroud) 当我尝试这段代码时
char *a[] = {"hello", "world" };
char **p = a;
char a[][10]={"hello", "world"};
Run Code Online (Sandbox Code Playgroud)
我的编译失败,我被告知变量 a 存在冲突类型错误。顶部声明与底部声明有何不同?
我注意到,很多在线的代码仅针对删除节点或删除节点功能,LinkedList
只是将上一个节点的下一个设置为要删除的下一个节点。但这不是一个不完整的删除,因为删除的节点仍指向下一个吗?
例如
A-> B-> C
如果删除B
,则应A
指向C
。但是,如果您不B
指向null
,就不B
存在,因为它指向的是C
?
同样明智的是,对于Java中的双链表,如果要删除节点,是否不需要确保该节点不再指向任何要真正删除的节点?
我在这里读到Unix() 返回的https://pkg.go.dev/time#Unixthe local Time corresponding to the given Unix time, sec seconds and nsec nanoseconds since January 1, 1970 UTC
您还可以分别使用 UnixNano() 和 UnixMilli() 获取自 1970 年以来的毫秒数或纳秒数。
我想我对这如何安全感到困惑。如果纳秒、毫秒或常规秒的数量超过 int64 的容量,是否会出现日期/时间中断?
另外,我在 go Playground https://go.dev/play/上进行了实验,通过打印出来time.Now.Unix()
,我总是会得到 1257894000 秒,即使我运行代码的时间间隔大约是一分钟。
然而,如果我这样做的话,我确实看到了不同
time.Now.Unix()
time.Sleep(time.Duration(1) * time.Second)
time.Now.Unix()
Run Code Online (Sandbox Code Playgroud)
这给了我 1257894000 和 1257894001。
我很困惑 Unix 时间基本上是如何工作的。
c ×2
java ×2
pointers ×2
arrays ×1
declaration ×1
gaussianblur ×1
go ×1
heap-memory ×1
linked-list ×1
opencv ×1