问题标签 [pointer-conversion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - (void*) ptr == ptr 总是正确的吗?
我从上一个问题中删除了这个问题,因为我认为这是一个相当个人的问题。所以我在标准中找到了指针转换的段落,关于我的问题的段落是:
6.3.2.3
指针
1 指向 void 的指针可以转换为指向任何对象类型的指针或从指向任何对象类型的指针转换。指向任何对象类型的指针都可以转换为指向 void 的指针并再次返回;结果应与原始指针比较。
...
4 将空指针转换为另一种指针类型会产生该类型的空指针。任何两个空指针应该比较相等。
现在它只说
将永远是真实的,但那又如何
没有明确说明这是对还是错。还是我误解了第 1 段?
c - C中的地址位置和地址位置的值
这两行代码的作用是什么?我认为该char *Pile = (char *)PileInts;
行创建了一个名为的字符,该字符*Pile
给出了地址的值PileInts
。我对吗?我能得到更深入的解释吗?
c++ - Aliasing and pointer-interconvertability
Given the following code:
The generated code is:
Here the compiler assumes aliasing.
If member t
is not present, the types X
and int
are pointer-interconvertible. As so, the compiler must generate code as if the references could alias.
But if member t
is present, they should no longer be pointer-interconvertible and code for the non-aliased case should be generated. But in both cases the code is identical except the relative address of member k
.
The assembler:
As an counter-example
in the above version the generated code assumes no aliasing, but the types are pointer-interconvertible.
Can anyone explain this?
c++ - 任何人都可以解释为什么我在这里得到 1 吗?
这是一个指针算术问题
我也试过 long int c
c - 即使 sizeof(void*)==sizeof(unsigned long int) 也可能将 void* 转换为 unsigned long int 导致未定义的行为
事实上,我知道 C99 中有 uintptr_t 和 intptr_t 。但是,出于教育目的,我想问一些问题。在开始之前,我知道这是一种不好的做法,绝不应该以这种方式进行。
Q1。案例 1 会导致未定义的行为吗?安全吗?如果不是,为什么?如果它是安全的,是否保证“case_1”变量与 unsigned long int 具有完全相同的地址?
Q2。与案例 2 相同。
Q3。与案例 3 相同。
Q4。案例 4 同上。
c++ - 从 bool* 到 void* 到 int* 的错误转换
通常在 C++ 中,有一个参数void* user_data
可以用来传递任意类型。
我用它来传递一个布尔数组。但是,我有一个错误,我从bool*
--> void*
-->投射int*
,我得到了奇怪的结果。这是一个例子。
输出:
有人可以向我解释问题是什么吗?通常,当我从 bool 转换为 int 时,没有问题:false 映射到 0,true 映射到 1。显然,这里不是这种情况。
c - 在 C 中正确处理 128..255 个字符
我需要处理一些 Win-1251 编码的文本(8 位编码,对西里尔文使用 128..255 中的一些)。据我所知,创建 C 时考虑了 7 位 ASCII,没有明确支持 127 以上的单字节字符。所以我有几个问题:
- 哪种类型更适合此文本:
char[]
或unsigned char[]
? - 如果我使用
unsigned char[]
内置函数 (strlen
,strcmp
),编译器会警告隐式转换为char*
. 这样的演员阵容能打破什么吗?我应该重新实现一些函数来unsigned char
明确支持字符串吗?
c++ - 赋值期间是否发生隐式指针转换?
例如
所以我的问题是,为什么这里我们不需要手动转换它。
这里是否发生隐式转换?
sockets - C++ Socket recv() 总是返回 0
这确实有效:
这不起作用。它总是返回零,为什么?
这不是主要问题,我知道如何将 char 数组转换回 size_t。但我只想知道为什么它不起作用。