有人能够提醒我在C语言中给一个数组赋值的语法,特别是多维数组赋值为一个单一值的情况吗?
我认为花括号可以实现这个功能,但是当我测试时却收到了编译器错误信息:
int ArrayName [5][5] = {1};
将数组初始化为1。
有人能够提醒我在C语言中给一个数组赋值的语法,特别是多维数组赋值为一个单一值的情况吗?
我认为花括号可以实现这个功能,但是当我测试时却收到了编译器错误信息:
int ArrayName [5][5] = {1};
将数组初始化为1。
= { 0 }
),但对于任何其他值来说都是不可能的。可以使用指向指针的malloc动态构建多维数组。在下面的示例中,声明了一个单一的指向指针的int类型。在声明时,指针没有有意义的值。然后调用mallac请求指针指向nx个有效内存单元的块:
x = (int **) malloc(nx * sizeof(int *));
x[0], x[1] ... x[nx-1], OR *x, *(x+1), *(x+2),
... *(x+nx-1).
for (i=0;i<nx;++i){
x[i] = ( int * ) malloc( ny * sizeof(int));
}
for (i=0;i<nx;++i){
*(x+i) = ( int * ) malloc( ny * sizeof(int));
}
现在我们指向指针数组中的每个指针都指向一个有意义的内存块(每个块的大小为ny int),我们可以分配值。要了解如何分配值,请考虑下面的示意图。您需要仔细研究此内容,直到非常清楚正在发生什么。这可能有点棘手,但一旦你掌握了它,它就不那么糟糕了。
x[0] ---> | *x[0] | *x[0]+1 | *x[0] + 2 | ... | *x[0]+ny-1 |
x[1] ---> | *x[1] | *x[1]+1 | *x[1] + 2 | ... | *x[1]+ny-1 |
.
.
.
x[nx-1] ---> | *x[nx-1] | *x[nx-1]+1 | *x[nx-1] + 2 | ... | *x[nx-1]+ny-1 |
这相当于:
x[0] ---> | *(*(x+0)+0) | *(*(x+0)+1) | *(*(x+0)+2) | ... | *(*(x+0)+ny-1) |
x[1] ---> | *(*(x+1)+0) | *(*(x+1)+1) | *(*(x+1)+2) | ... | *(*(x+1)+ny-1) |
.
.
.
x[nx-1] ---> | *(*(x+nx-1)+0) | *(*(x+nx-1)+1) | *(*(x+nx-1)+2) | ... | *(*(x+nx-1)+ny-1) |
这相当于:
x[0] ---> | x[0][0] | x[0][1] | x[0][2] | ... | x[0][ny-1] |
x[1] ---> | x[1][0] | x[1][1] | x[1][2] | ... | x[1][ny-1] |
.
.
.
x[nx-1] ---> | x[nx-1][0] | x[nx-1][1] | x[nx-1][2] | ... | x[nx-1][ny-1] |
...鉴于重要关系:
*( *(x + i) + j) = *( x[i] + j) = x[i][j]
int ArrayName[5][5];
for(size_t i = 0; i < 5; i++)
for(size_t i2 = 0; i2 < 5; i2++)
ArrayName[i][i2] = 1;
或者更高效的方式是:
int ArrayName[5][5];
for(size_t i = 0, *ptr = ArrayName; i < (5*5); ++i, ++ptr)
*ptr = 1;
void init_arr(void* ptr, void* value, size_t size)
{
for(size_t i = 0; i < size; ++i, ++ptr)
*ptr = *value;
}
int ArrayName[5][5];
int val = 1;
init_arr(ArrayName, val, 5 * 5);
template <class T>
void init_arr(T *ptr, T value, size_t size)
{
for(size_t i = 0; i < size; ++i, ++ptr)
*ptr = value;
}
int ArrayName[5][5];
init_arr(ArrayName, 1, 5 * 5);
如果你真的在使用C++,你应该使用向量... 哎呀,可能有一种花哨的boost方法可以做到这一点。 :)
我不确定这是否可能。您应该使用for
或while
循环。
如果您想用单个字节填充内存,可以使用memset
函数。