C++中有些特性是类型安全的,而其他一些特性则不是。
C++类型安全示例:
char c = 'a';
int *p = &c; // this is not allowed (compiler error)
C++缺乏类型安全性的示例:
int *p; // I don't have to initialize p, and so it will have some junk/random value
*p = 12345; // this will probably lead to segmentation fault!
我在几篇文
很久以前,我曾在C语言里为学校编程。我记得我非常讨厌C的一些东西:未赋值的指针不指向NULL。
我问了很多人,包括老师,为什么在世界上,他们会使未分配指针的默认行为不指向空,因为它看起来比不可预测的危险得多。
答案应该是表演,但我从来没有相信过。我认为,如果C默认为NULL,编程史上的许多bug是可以避免的。
这里有一些C代码要指出(双关意)我要说的是什么:
#include <stdio.h>
void main() {
int * randomA;
int * randomB;
int * nullA = NULL;
int * nullB = NULL;
第1行导致error: conversion from ‘C<void()>’ to non-scalar type ‘C<void (*)()>’ requested。我知道我可以将它写成第2行,但是如何使用make_class()并将它赋值给一个变量呢?
#include <iostream>
using namespace std;
template<class T> class C {
T f;
public:
C(T ff) : f(ff) {}
};
template<class Ft> C<
创建变量时,例如:
int x = 5;
它会存储在内存中的某个地方,很酷。
但是,当我通过执行以下操作更改变量的值时:
x = 10;
内存中发生了什么?
x的新值是否会覆盖使用相同内存地址的旧值?
或者新值被存储在新的内存地址中,然后旧地址被删除?
当我遇到指针时,这个问题就出现了。似乎使用指针更改变量的值与使用另一个值定义变量是相同的。
这是我的代码(大部分是注释(lol)):
#include "iostream"
int main()
{
int x = 5; // declaring and defining x to be 5
int *xPoi
using System;
class Program
{
static void Main()
{
haha haha1;
}
}
class haha
{
int a;
int b;
public haha(int a, int b)
{
this.a = a;
this.b = b;
}
}
我知道如果我想做实例,我应该写这样的代码:
haha haha1 = new haha(1,2);
但当我写下
haha haha1;
没有编译错误。
haha haha1;是什么意
我有以下代码,它在VS2015中编译时没有警告(所有警告都已启用):
// buffer.h
typedef struct {
char * const start; // start of the buffer
char * const end; // one byte after the end of the buffer
char * pos; // current position
} Buffer;
static inline Buffer Buffer_create(char *buffer, int size) {
Buff
我正在学习C++,我逐渐认识到,如果没有初始化指针,就可以指向内存中的随机位置,并造成内存可能被其他程序使用的问题。
现在,如果是这样的话,代码的任何部分中都不应该有这一行:
int* ptr;
相反,我们应该有这样的
int* ptr = NULL; //Is this going to avoid the problem
请提出建议,因为我在很多书中见过第一次line(int* ptr;),所以我对此产生了怀疑。如果可能的话,也给出一些例子。
我是一个Java爱好者,我正在尝试和C++一起做一个班级的作业。我在声明我创建的一个类型的变量作为另一个类的属性时遇到了问题。这就是我的方法
private:
HeatingUnit heatingUnit;
int tempToMaintain;
public:
BangBangControl(int tempToMaintain, bool isOn, int initialTemp){
heatingUnit= new HeatingUnit(isOn, initialTemp);
this -> tempToMaintai
谁能给我解释一下我在这里失踪的原因吗?
给定的
let index: Int32 = 100
为什么这样不好:
// Use of extraneous '&'
let ptr = &index // Type inference?
甚至:
// Use of extraneous '&'
let ptr: UnsafePointer<Int32> = &index
但这是:
{
func point(num: UnsafePointer<Int32>) -> UnsafePointer<
上下文:
在发现a[i]只是*(a + i)的语法糖,因此相当于*(i + a)和i[a]之前,我用for和off编程了大约2年。我的现实被颠倒了很多“啊哈!”在接下来的几天学习和阅读中,狂欢时刻接踵而至(“这就是为什么数组总是通过引用传递的原因!”)等)。从那时起,我就把指针/数组的等价性内化了,并把它紧紧地放在我的心脏上,所以想象一下,当我偶然发现一种叫做“阵列衰减”的东西时,是多么的震惊啊。以下是典型的例子:
代码:
#include <stdio.h>
int Length(int*);
int main () {
int arr[100];
printf(
正如标准所述,语言链接是函数类型的一部分,给出了以下示例
extern "C" void f1(void(*pf)()); // declares a function f1 with C linkage,
// which returns void and takes a pointer to a C function
// which returns void and takes no parameters
extern "C" typedef
我有这样的代码:
MyClass object;
.... some code here where object may or may not be initialised...
if (object.getId > 0) {
....
}
这会导致编译错误:object可能尚未初始化,这是很公平的。
现在我将我的代码更改为:
MyClass object;
.... some conditional code here where object may or may not be initialised...
if (object != null &&
我需要实现一个指向typedef‘’ed指针的简单动态数组。
每次用户提出请求时,使用realloc,数组大小都会增大(指针)。
所以我要说的是
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef void* node;
void printmem(node* a, int c) {
int i;
for (i = 0; i < c; ++i)
{
printf("%d\t\t%p\n", i, a[i]);