相关疑难解决方法(0)

创建具有可变大小尺寸的2D数组

我希望能够创建一个二维数组,其大小与我从文件中读取的宽度和高度相同,但是当我说:

int array[0][0]
array = new int[width][height]
Run Code Online (Sandbox Code Playgroud)

c++ arrays

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

2D数组作为函数的参数

为什么不像普通数组那样在函数中声明2D数组参数?

 void F(int bar[]){} //Ok
 void Fo(int bar[][]) //Not ok
 void Foo(int bar[][SIZE]) //Ok
Run Code Online (Sandbox Code Playgroud)

为什么需要声明列的大小?

c++

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

指向数组的指针与指向数组第一个元素的指针之间的区别

int (*arr)[5]means arr是一个包含5个整数的指针数组.现在究竟是什么指针?

如果我声明指向第一个元素的指针int arr[5]在哪里,它是否相同arr

arr从两个例子是一样的吗?如果没有,那么究竟什么是指向数组?

c++ arrays pointers

7
推荐指数
4
解决办法
3189
查看次数

C++指针与数组表示法

当我声明一个像这样的新数组:

int foo[5]
Run Code Online (Sandbox Code Playgroud)

foo真正的指针数组的第一个元素?我能做到这一点:

*(foo+2)
Run Code Online (Sandbox Code Playgroud)

访问数组的第三个元素?假设我正在制作2D数组:

int foo[3][4]
Run Code Online (Sandbox Code Playgroud)

foo现在int**

c++ arrays pointers

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

调用free()或delete而不是delete []有危险吗?

可能重复:
(POD)释放内存:删除[]是否等于删除?

是否delete将元素释放到数组中的第一个元素之外?

char *s = new char[n];
delete s;
Run Code Online (Sandbox Code Playgroud)

在上述情况下是否重要,因为所有元素s都是连续分配的,并且不应该delete仅仅是数组的一部分?

对于更复杂的类型,会delete调用超出第一个对象的析构函数吗?

Object *p = new Object[n];
delete p;
Run Code Online (Sandbox Code Playgroud)

如何delete[]推断Object超出第一个的s 数,这是不是意味着它必须知道分配的内存区域的大小?如果出于性能原因为内存区域分配了一些突出怎么办?例如,可以假设并非所有分配器都提供单个字节的粒度.然后,任何特定的分配都可能超过每个元素所需的大小或整个元素.

对于原始类型,例如char,,int之间有什么区别:

int *p = new int[n];
delete p;
delete[] p;
free p;
Run Code Online (Sandbox Code Playgroud)

除了通过delete- > free解除分配机制各自通话所采取的路线?

c++ free memory-management new-operator

6
推荐指数
2
解决办法
4770
查看次数

访问malloc声明的数组

我正在完成一项任务(另一个问题的细节).作为其中的一部分,我增加了数组的大小.并发现当我尝试初始化数组时:

int arr[2097152]; // 8MB
Run Code Online (Sandbox Code Playgroud)

我有分段错误...我认为它是因为我试图声明一个太大的数组?然后我找到了解决这个问题的方法就是使用malloc.但是对C来说是新手(主要使用JavaScript/Python/Java ......).我对指针和东西很困惑......

我已经声明了一个8MB的数组:

int *arr = malloc (MBs * 1024 * 1024 / sizeof(int)); // MBs = 8
Run Code Online (Sandbox Code Playgroud)

但是现在......我如何访问它或写入它?当我使用它arr时,我得到的地址,如果我使用*arr我得到第一个元素?

c pointers

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

C++中的多维数组,对我来说是一个谜:(

我在理解多维数组时遇到了很多问题.让一个数组

x[2]; // now x is constant pointer to first element i.e x's name is address of x[0]
Run Code Online (Sandbox Code Playgroud)

现在二维数组:

x[2][5]; // here x is address of x[0] which contains the address of first element of array x[][0];
Run Code Online (Sandbox Code Playgroud)

现在是指针

int(*y)[5]; 
Run Code Online (Sandbox Code Playgroud)

是指向整数数组5的指针.怎么写y = x

现在我在VS中做了一些实用的理解,这是在这里,我的主要问题在于图像:

http://img184.imagevenue.com/img.php?image=96382_first_122_1120lo.jpg

请从概念上回答问题; C++如何存储多维数组等

我会非常感谢任何帮助:)

c++ arrays multidimensional-array

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

C指针阵列初始化

我很困惑这两个初始化之间有什么区别:

    int (*p)[10];
Run Code Online (Sandbox Code Playgroud)

    int *p[10]
Run Code Online (Sandbox Code Playgroud)

我知道他们都可以指向2D数组,其行数中的元素数为10 ....

c pointers

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

数组作为参数

当我将数组作为参数传递时,我想知道哪一个是最好的?

void function(int arr[]) {...};
Run Code Online (Sandbox Code Playgroud)

要么

void function(int* arr) {...};
Run Code Online (Sandbox Code Playgroud)

你能告诉我你的理由吗?你可以参考哪本书?谢谢!

c++

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

C++:解除引用的[x]语义:C风格与指针数组

我知道ac样式数组存储为连续的内存块.这就是为什么以下代码:

int main (int argc, char *argv[]) {
    int arr[3][3];
    *(*arr + 5) = 5;
    std::cout << arr[1][2] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印5.我假设对于c样式数组*(*arr + 5) = 5;大致等于编译器生成的代码arr[1][2] = 5;不是吗?(Q1)

如果是这样,则arr [1] [2]的语义(即在一个内存块上移位)与在多维指针数组上执行相同操作完全不同,其中每个嵌套级别导致指针被解除引用.是对的吗?(Q2)

有什么情况我需要自己关注吗?即编译器不知道自己在处理什么样的数组?(Q3)

(Qx标志着我的问题)

提前谢谢你的问候

c++ arrays

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