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++中有效?它与第一个语句有什么不同?它不是仍然有害吗?如果是这样的话,为什么标准说它没关系?
我正在使用sublime text 2来编写我的程序.我想在其中运行控制台来编译和运行它们.有没有办法将控制台命令行嵌入到sublime text 2中?它已经存在吗?
注意:我正在使用Windows和Linux,并且任何系统的解决方案都会有所帮助.
如果我们编译并执行以下代码:
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的内存?
我正在阅读关于memcpy和的c ++参考资料,memmove并且他们似乎做了同样的事情,除了memmove有一个特定的思考调用(允许目标和源重叠).
什么是重叠,什么时候发生?
我试图声明一个指向任何返回相同类型的函数的函数指针.我省略了指针声明中的参数类型,以查看将生成什么错误.但该程序编译成功并执行没有任何问题.
这是正确的声明吗?我们不应该指定参数类型吗?
#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) 让我们考虑让一个带有构造函数的类抛出如下异常:
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关键字构造一个新 …
我最近搬到了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编程只memory提到了.但实际上似乎还有更多; 这些buffer和stack文字几乎就在那里.
这些条款有什么区别?为什么他们很有趣?
拜托,我需要一个详细的答案.简短的答案无法提供服务.一些资源也可能有所帮助.
提前坦克.
我有一个在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++ 11标准引入了类型char16_t和char32_t?是不是1字节足以存储字符?扩展字符类型的大小有什么用途吗?
考虑到这种数据结构:
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)
A (0.00, 1.00)
B (1.00, 0.00)
point = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 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。
定义这样的函数时:
void myFunction(arguments){
// some instructions
}
Run Code Online (Sandbox Code Playgroud)
使用char[] name和char name[]作为函数的参数之间的差异是什么.为什么不使用指向char的指针.