小编rul*_*lof的帖子

为什么从字符串常量到'char*'的转换在C中有效,但在C++中无效

C++ 11标准(ISO/IEC 14882:2011)在§ C.1.1:

char* p = "abc"; // valid in C, invalid in C++
Run Code Online (Sandbox Code Playgroud)

对于C++来说,没关系,因为指向String Literal的指针是有害的,因为任何修改它的尝试都会导致崩溃.但为什么它在C中有效?

C++ 11还说:

char* p = (char*)"abc"; // OK: cast added
Run Code Online (Sandbox Code Playgroud)

这意味着如果将强制转换添加到第一个语句,它将变为有效.

为什么转换使第二个语句在C++中有效?它与第一个语句有什么不同?它不是仍然有害吗?如果是这样的话,为什么标准说它没关系?

c c++ string char c++11

137
推荐指数
4
解决办法
12万
查看次数

在崇高文本中的控制台

我正在使用sublime text 2来编写我的程序.我想在其中运行控制台编译运行它们.有没有办法控制台命令行嵌入到sublime text 2中?它已经存在吗?

注意:我正在使用WindowsLinux,并且任何系统的解决方案都会有所帮助.

console plugins sublimetext2

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

指针可以指向4GB后的地址吗?

如果我们编译并执行以下代码:

int *p;
printf("%d\n", (int)sizeof(p));
Run Code Online (Sandbox Code Playgroud)

似乎指向任何类型的指针的大小是4个字节,这意味着32位,因此2 32个地址可以存储在指针中.由于每个地址与1个字节相关联,因此2 个32个字节为4 GB.

那么,4 GB内存后指针如何指向地址?一个程序如何使用超过4 GB的内存?

c c++ memory pointers

6
推荐指数
1
解决办法
597
查看次数

memmove()定义中有什么重叠?

我正在阅读关于memcpy和的c ++参考资料,memmove并且他们似乎做了同样的事情,除了memmove有一个特定的思考调用(允许目标和源重叠).

什么是重叠,什么时候发生?

c c++ overlapping

5
推荐指数
1
解决办法
3710
查看次数

函数指针没有参数类型?

我试图声明一个指向任何返回相同类型的函数的函数指针.我省略了指针声明中的参数类型,以查看将生成什么错误.但该程序编译成功并执行没有任何问题.

这是正确的声明吗?我们不应该指定参数类型吗?

#include <stdio.h>
#include <stdlib.h>

void add(int a, int b)
{
    printf("a + b = %d", a + b);
}

void (*pointer)() = &add;

int main()
{
    add(5, 5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

a + b = 10
Run Code Online (Sandbox Code Playgroud)

c pointers

5
推荐指数
2
解决办法
5830
查看次数

C ++类构造函数引发异常

让我们考虑让一个带有构造函数抛出如下异常

class Class
{
    public:
        Class(type argument)
        {
            if (argument == NULL)
            {
                throw std::exception("Value cannot be null.\nParameter name: argument");
            }

            // Instructions
        }
    private:
        // Properties
}
Run Code Online (Sandbox Code Playgroud)

由于 构造函数可能会引发异常,因此我们无法直接声明对象

Class obj(argument); // Harmful
Run Code Online (Sandbox Code Playgroud)

这意味着必须使用try / catch来调用构造函数

try
{
    Class obj(argument);
}
catch (std::exception& ex)
{
    std::cout << ex.what() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

问题是我们只能在try块内使用对象。在try块之外使用它的唯一方法是声明一个Class * 指针,然后使用new关键字构造一个新 …

c++ constructor exception class

5
推荐指数
1
解决办法
2020
查看次数

gcc不会编译SDL C程序(对SDL函数的未定义引用)

我最近搬到了linux,我遇到了使用gcc编译SDL C程序的问题.

我正在使用的命令:

gcc `sdl-config --cflags --libs` -o main main.c
Run Code Online (Sandbox Code Playgroud)

即使分离sdl-config标志:

gcc `sdl-config --cflags` -c main.c
gcc `sdl-config --libs` -o main main.o
Run Code Online (Sandbox Code Playgroud)

我得到了同样的错误:

/tmp/ccHYyjKd.o: In function `main':
main.c:(.text+0xe): undefined reference to `SDL_SetMainReady'
main.c:(.text+0x18): undefined reference to `SDL_Init'
main.c:(.text+0x31): undefined reference to `SDL_SetVideoMode'
main.c:(.text+0x54): undefined reference to `SDL_MapRGB'
main.c:(.text+0x6b): undefined reference to `SDL_FillRect'
main.c:(.text+0x77): undefined reference to `SDL_Flip'
main.c:(.text+0x83): undefined reference to `SDL_WaitEvent'
main.c:(.text+0x90): undefined reference to `SDL_Quit'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我非常简单的程序:

#include <stdio.h>
#include <stdlib.h>
#define …
Run Code Online (Sandbox Code Playgroud)

c linux gcc sdl

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

内存,缓冲区和堆栈有什么区别?

虽然学习c编程只memory提到了.但实际上似乎还有更多; 这些bufferstack文字几乎就在那里.

这些条款有什么区别?为什么他们很有趣?

拜托,我需要一个详细的答案.简短的答案无法提供服务.一些资源也可能有所帮助.

提前坦克.

c memory stack buffer

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

传递变量而不是常量时,未定义引用`sin'

我有一个在Windows中完美运行的代码但是当我尝试在linux中编译它时出现错误.我发现问题在于sin()功能.

如果我直接传递给它一个常数,它工作正常:

#include <stdio.h>
#include <math.h>

int main(void) {
    float y = sin(1.57);

    printf("sin(1.57) = %f", y);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出1:

sin(1.57) = 1.000000
Run Code Online (Sandbox Code Playgroud)

但当我传递给它一个变量我得到一个错误:

#include <stdio.h>
#include <math.h>

int main(void) {

    float x = 1.5;
    float y = sin(x);

    printf("sin(%f) = %f", x, y);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出2:

/tmp/ccfFXUZS.o: In function `main':
source-bcfaa9ff162b:(.text+0x1a): undefined reference to `sin'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

c linux gcc

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

为什么C++ 11引入了char16_t和char32_t类型

为什么C++ 11标准引入了类型char16_tchar32_t?是不是1字节足以存储字符?扩展字符类型的大小有什么用途吗?

c++ types c++11

3
推荐指数
2
解决办法
2064
查看次数

使用typedef作为变量名称不会产生任何错误

考虑到这种数据结构:

typedef struct {
    float x;
    float y;
} point;
Run Code Online (Sandbox Code Playgroud)

我正在使用此功能来置换坐标:

point permute(point M)
{
    point N;
    N.x = M.y;
    N.y = M.x;
    return N;
}
Run Code Online (Sandbox Code Playgroud)

为什么用名称(point)声明一个typedef没有给出任何错误的变量?

int main(void)
{
point A;
point B;
int point = 7;

A.x = 0;
A.y = 1;
B = permute(A);

printf("A (%.2f, %.2f)\n", A.x, A.y);
printf("B (%.2f, %.2f)\n", B.x, B.y);
printf("point = %d\n", point);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:http://ideone.com/wCxbjD

A (0.00, 1.00)
B (1.00, 0.00)
point = …
Run Code Online (Sandbox Code Playgroud)

c c++ data-structures

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

按位非运算符返回意外和负值?

我正在尝试使用 Bitwise NOT 获取整数的值,但没有得到我期望的值。

#include <stdio.h>

int main(){
    int i = 16;
    int j = ~i;
    printf("%d", j);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

16 不应该是:

00000000000000000000000000010000
Run Code Online (Sandbox Code Playgroud)

所以 ~16 应该是:

11111111111111111111111111101111
Run Code Online (Sandbox Code Playgroud)

为什么我没有得到我期望的结果,为什么结果是负面的?

这就是我想要做的:

我有一个例如 27 的数字,它是:

00000000000000000000000000011011
Run Code Online (Sandbox Code Playgroud)

并且想要检查每一位是 1 还是 0。

所以我需要得到这个值

11111111111111111111111111110111
Run Code Online (Sandbox Code Playgroud)

使用第二个来检查第一个的第 3 位是否设置为 1。

c c++ binary bit-manipulation

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

"char [] name"和"char name []"之间的区别作为c中的函数参数

定义这样的函数时:

void  myFunction(arguments){
   // some instructions
}
Run Code Online (Sandbox Code Playgroud)

使用char[] namechar name[]作为函数的参数之间的差异是什么.为什么不使用指向char的指针.

c

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