为具有5行10列的二维数组A编写声明,其中每个元素都是长度为20的字符串.A的大小是多少?
第二部分:编写语句,将数组中的每个元素设置为一串空格。
这是第一年的编程,所以一切都非常基础。这是在C.
感谢您的帮助。
这是我尝试第一部分
char c[5][10][20];
这是我尝试第二部分
int x,y;
for (x=0;x<5;x++) {
for (y=0;y<10;y++) {
c[x][y]=" "; }}
答案 0 :(得分:1)
我不知道我是否误读了您的问题,或者它是否真的像找到5 * 10 * 20
字符数组的大小一样直接? sizeof 类型char
是1字节每 char
。因此5 * 10 * 20 = 1000
(与通常为4字节每个 int
的类型int
相比。)
要确定静态声明数组的范围内的大小,您可以使用sizeof
运算符,例如:
#include <stdio.h>
int main (void) {
char c[5][10][20];
printf ("\n sizeof c : %lu\n\n", sizeof c);
return 0;
}
使用/输出强>
$ ./bin/sizeof_3d
sizeof c : 1000
要将数组中的每个元素设置为' '
(space
),您有几个选项(1)在数组中的每个元素上循环;或(2)使用memset
。要使用循环:
size_t i, j, k;
...
for (i = 0; i < 5; i++)
for (j = 0; j < 10; j++)
for (k = 0; k < 20; k++)
c[i][j][k] = ' ';
如果您需要文字字符串空格,则需要添加 nul-terminatedating 字符作为每个字符串中的最后一个字符。使用上面的循环时,可以通过将c[i][j][k] = ' ';
替换为使用三元运算符来编写 nul-character ({{1} })作为每个字符串中的最后一个字符:
zero
使用 c[i][j][k] = k + 1 == 20 ? 0 : ' ';
(不要忘记memset
):
#include <string.h>
要在使用memset (c, ' ', sizeof c);
后取消终止,可以使用缩写循环:
memset
如果您还有其他问题,请与我们联系。
答案 1 :(得分:0)
首先为20个字符的字符串声明一个类型。
typedef struct mystring {
char str[20];
} mystring;
然后你可以声明你的变量A LIKE THIS:
mystring A[5][10];
因此,A是类型5字符串的变量,它有5行10列。数组中的每个元素都是mystring类型,它作为一个可以容纳20个字符的字符串。 mystring可以容纳的字符串的最大长度当然是19个字符,因为你需要为null终止符保留一个字符。
答案 2 :(得分:0)
一个数组
A
,有5行10列,每个元素都是长度为20的字符串。
- A的尺寸是多少?
醇>
我们通过将列乘以其行并将其结果乘以数组元素的大小得到的数组A的大小。在这种情况下,它们是长度为20个字符的字符串。假设您的机器的char
实现是1个字节,那么数组A
占用的总大小为:
5 x 10 x 20 = 1000字节或1MB。
- 要在C ++中定义这样的数组,可以在
醇>main
内写一下,避免使用幻数:
size_t rows_number = 5;
size_t columns_number = 10;
size_t element_size = 20;
char c[rows_number][columns_number][element_size];
- 要将其元素初始化为特定值,可以对数组的每个索引使用
醇>for
个循环:
char initial_value = ' ';
for (i = 0; i < row_number; i++) {
for (j = 0; j < column_number; j++) {
for (k = 0; k < element_size; k++) {
c[i][j][k] = initial_value;
}
}
}