- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我有这段代码
char buf[2];
buf[0] = 'a';
buf[1] = 'b';
std::cout << *((long *)((void*)buf) + 1) << std::endl;
当我看到它时,我对自己说:
我们有内存地址 1000(例如),这是 buf[1] 的地址。所以我认为 *((long )((void)buf) + 1) 会打印出地址中的任何内容:从 1000 到 1000 + sizeof(long)
但事实并非如此。此代码打印总是 -858993460
这个数字是多少,为什么它不是随机的?
我显然缺乏了解正在发生的事情的知识,所以如果你能给我提示或其他东西,我将不胜感激!
最佳答案
What is that number and why it isn't random?
这是一个随机值。您的程序中没有任何内容表明应该打印值。
就您运行程序而言,它恰好是一致的。也许你还没有运行它足够。使用未初始化的内存会产生未定义的行为。带有 UB 的程序可能会按预期运行多年,然后无法编译。
顺便说一下,您的表达没有预期的含义。尝试添加更多空格。
* ( (long *) ((void*)buf) + 1 )
首先将 buf
转换为 void *
,然后再次将其转换为 long *
,然后添加一个(以获得下一个long
,不是下一个字节),然后从内存中取出一个long
。打印的字节完全在 char[2]
数组之外。
关于c++ - 多久*投工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25579681/
我想设置一个 float值到 1.0如果一个向量等于另一个向量,并且 0.0如果向量不相等 if( v1 == v2 ) floatVal = 1.0 ; else floatVal = 0.0
有没有什么办法投listView.SelectedIndices至 List ? 我试过了 (List)reListViewAllMovies.SelectedIndices.Cast>() 但它不起
假设我有一个数据框: data <- data.frame(id=c(1,2,2,2), code=c("A","B","A","B"),
我是一名优秀的程序员,十分优秀!