我发现在用c语言编译和用c++编译时,我发现了一个不完全理解的区别.假设我声明了一个大小为5的字符数组:
char my_array[5];
据我理解,"my_array“实际上是一个char指针,它允许我这样做:
char* a = my_array;
现在,我知道当我声明我的数组时,我只分配了5个字节(其中每个值都分配一个字节),这意味着"&my_array“不应该存在,因为指向my_array的指针没有分配的内存。为了证明这一点,我做了这个:
char* b = &my_array; // compiler error in c++, not in c
c
为了学习的目的,我把二维字符串数组分解成指针,在C中乱搞。
我编写了以下内容,构造了一个二维字符串数组:
#include <stdio.h>
#define ARR_SIZE 10
#define STR_LEN 20
int main() {
// Each string in our 2D array has STR_LEN bytes of space
char arr[ARR_SIZE][ARR_SIZE][STR_LEN];
for (int i = 0; i < ARR_SIZE; i++) {
for (int j
该函数需要一个指向二维数组[4][5]的指针.实际上,我们可以提交一个指向一维数组[20]的指针.Ie源代码如下所示:
extern f (int a[4][5]);
int b[20];
void func (void)
{
f (b);
}
这是完美的工作代码(如果内部的数组b,我们将像他们在一个二维数组的布局)。不过,汇编将发出警告(由于类型不足):
$ gcc t.c -c
t.c: In function 'func':
t.c:7: warning: passing argument 1 of 'f' from incompatible poin
我是C++的新手,我有一个我不能理解的错误。
class1* a = (class1*)p1;
class2* b = (class2*)p2;
a->foo(b);
错误是:
error: no matching function for call to 'a::foo(b*&)'
note: candidates are: void a::foo(const b&)
我怎么才能把这件事做好呢?
我正在学习编程语言原理,我有一个关于C和C++的问题。
int (*f)(int);
int (*g)(int);
int (*h)(char);
f = g; // ok
h = g; // warning in C, error in C++
将g赋值为f (f = g)不会导致C或C++中的错误,但将g赋值为h (h = g)将生成C语言中的编译器警告和C++中的编译错误。
我听说在C++中char类型通常会自动转换为int,所以我认为这不会导致错误。
有人能给我解释一下吗?
好的,我对编程相当陌生,所以请放心吧,c++。我正试图编写一个程序,为二维有限元分析(厚度被忽略)的金属板的尺寸。因此,我为我的部分(板块)创建了一个类,为网格创建了元素,为元素创建了节点。网格将由正方形元素组成,并将应用于板的正面。现在,在继续讨论元素和节点类之前,我正在整理网格。
我正在使用(或希望使用)动态分配来创建一个包含网格元素的二维数组( mesh)。我正在尝试编写一个函数"meshingPart“来创建二维数组,其中行数是板块的高度,列是板块的长度。
当我运行程序时,我会得到这些错误,我不知道如何修复它们:
In member function 'void Pa
我需要在构造函数中传递一个指向数组的指针(我知道许多人认为在C++中使用普通数组是不好的做法,但现在我只想继续使用它)。
请考虑以下代码:
// let's omit includes
class A {
// irrelevant
}
class B {
public:
//irrelevant
void someMethod() {
_c = new C(array_id);
}
private:
C* _c;
A* array_id[SOME_CONST];
}
class C {
pu
对于C++来说,这是相当新的。我在代码的开头有以下声明:
#include <iostream>
#include <iomanip>
using namespace std;
int m, n;
void indtastVektor(double A[m]);
void indtastMatrix(double A[m][n]);
我的主菜是这样的:
int main() {
string svar;
do {
cout
<< "Ønskes indtastning af en ve
我在函数中声明了许多指向可变长度数组(VLA)的指针,以便动态分配二维数组;例如,
int M, N; // have some value
double (*arr1)[N] = calloc(M, sizeof(double [N]));
double (*arr2)[N] = calloc(M, sizeof(double [N]));
double (*arr3)[N] = calloc(M, sizeof(double [N]));
... // so many declarations
因为函数变得很长,所以我尝试将它分成几个函数,每个函数都需要所有这些指针作为参数。我没有传递函数
我正在用C++写一个康威的生活游戏。我得到了一个编译时错误,这与我将二维数组传递给方法的方式有关:
gameoflife.cpp:5:25: error: array has incomplete element type 'int []'
void print_game(int game[][], int SIZE);
gameoflife.cpp:6:23: error: array has incomplete element type 'int []'
void run_game(int game[][], int SIZE);
gameoflife
我正在尝试使用catboost来预测一个浮点数组。 在CalcModelPredictionSingle的文档中,参数为"floatFeatures - array of float features":https://github.com/catboost/catboost/blob/master/catboost/libs/model_interface/c_api.h#L175 然而,当我试图传递一个浮点数组时,我得到了这个错误: Cannot use type []*_Ctype_float as *_Ctype_float in assignment. 这表明它需要
我想问一下C++中的指针
我有一些简单的代码:
int add(int a, int b){
return a+b;
}
int runner(int x,int y, int (*functocall)(int, int)){
return (*functocall)(x,y);
}
现在,假设我使用以下方式调用这些函数:
cout<<runner(2,5,&add);
或者也许
cout<<runner(2,5,add);
有什么不同吗?因为当我尝试的时候,结果是相同的,没有错误。
非常感谢