相关疑难解决方法(0)

陷阱表示

  1. 什么是C中的陷阱表示(某些示例可能有帮助)?这适用于C++吗?

    float f=3.5;
    int *pi = (int*)&f;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编辑:我知道'pi'违反了别名规则,根据C标准它是UB.至少在海湾合作委员会它没有产生任何错误,但警告.在这个实现(即GCC)中,假设sizeof(int) == sizeof(float)do f*pi具有相同的二进制表示/模式?MSVC怎么样?

c c++ gcc visual-studio-2010

63
推荐指数
3
解决办法
1万
查看次数

将unsigned char*强制转换为char*是否安全,并将解除引用的指针视为真正指向char?

在标题为由于错误的strcmp参数处理而生成的警告之后,似乎存在一些关于标准实际上保证关于字符类型的值表示的问题.


问题

这看起来很好,但标准是否保证(1)总是会产生真实的

char unsigned * p1 = ...;
char          * p2 = reinterpret_cast<char *> (p1);

*p1 == *p2; // (1)
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++11 c++14

19
推荐指数
2
解决办法
5116
查看次数

何时使用unsigned char指针

unsigned char指针有什么用?我已经在许多地方看到它指针被指定为指向我们unsinged char为什么这样做?

我们收到一个指针int,然后输入它unsigned char*.但是如果我们尝试使用cout在该数组中打印元素,它就不会打印任何内容.为什么?我不明白.我是c ++的新手.

编辑下面的示例代码

int Stash::add(void* element)
{
    if(next >= quantity)
    // Enough space left?
        inflate(increment);

    // Copy element into storage, starting at next empty space:
    int startBytes = next * size; 
    unsigned char* e = (unsigned char*)element;
    for(int i = 0; i < size; i++)
        storage[startBytes + i] = e[i];
    next++;
    return(next - 1); // Index number
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

为什么编译器在删除动态分配的内存后不会自动为指针变量赋值?

我有一小段代码:

#include <iostream>
using namespace std;

int main() 
{
    int *p = new int(10);

    if(p != NULL)
    {
        cout<<"Deleted dynamic allocated memory"<<endl;
        delete p;
    }

    if(p == NULL)
    {
        cout<<"NULL"<<endl;
    }
    else
    {
        cout<<"Not NULL"<<endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用deleteoperator 删除动态分配的内存后,为什么编译器不会自动为指针(如p = NULL)分配NULL?

c++ null new-operator delete-operator

0
推荐指数
1
解决办法
312
查看次数