我希望能够创建一个二维数组,其大小与我从文件中读取的宽度和高度相同,但是当我说:
int array[0][0]
array = new int[width][height]
Run Code Online (Sandbox Code Playgroud) 为什么不像普通数组那样在函数中声明2D数组参数?
void F(int bar[]){} //Ok
void Fo(int bar[][]) //Not ok
void Foo(int bar[][SIZE]) //Ok
Run Code Online (Sandbox Code Playgroud)
为什么需要声明列的大小?
int (*arr)[5]means arr是一个包含5个整数的指针数组.现在究竟是什么指针?
如果我声明指向第一个元素的指针int arr[5]在哪里,它是否相同arr?
是arr从两个例子是一样的吗?如果没有,那么究竟什么是指向数组?
当我声明一个像这样的新数组:
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**?
可能重复:
(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解除分配机制各自通话所采取的路线?
我正在完成一项任务(另一个问题的细节).作为其中的一部分,我增加了数组的大小.并发现当我尝试初始化数组时:
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我得到第一个元素?
我在理解多维数组时遇到了很多问题.让一个数组
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++如何存储多维数组等
我会非常感谢任何帮助:)
我很困惑这两个初始化之间有什么区别:
int (*p)[10];
Run Code Online (Sandbox Code Playgroud)
和
int *p[10]
Run Code Online (Sandbox Code Playgroud)
我知道他们都可以指向2D数组,其行数中的元素数为10 ....
当我将数组作为参数传递时,我想知道哪一个是最好的?
void function(int arr[]) {...};
Run Code Online (Sandbox Code Playgroud)
要么
void function(int* arr) {...};
Run Code Online (Sandbox Code Playgroud)
你能告诉我你的理由吗?你可以参考哪本书?谢谢!
我知道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标志着我的问题)
提前谢谢你的问候