声明二维数组并查找sizeof:C编程

时间:2015-12-19 02:00:40

标签: c

为具有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]=" "; }}

3 个答案:

答案 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的字符串。

     
      
  1. A的尺寸是多少?
  2.   

我们通过将列乘以其行并将其结果乘以数组元素的大小得到的数组A的大小。在这种情况下,它们是长度为20个字符的字符串。假设您的机器的char实现是1个字节,那么数组A占用的总大小为:

5 x 10 x 20 = 1000字节或1MB。

  
      
  1. 要在C ++中定义这样的数组,可以在main内写一下,避免使用幻数:
  2.   
 size_t rows_number = 5;
 size_t columns_number = 10;
 size_t element_size = 20;

 char c[rows_number][columns_number][element_size];
  
      
  1. 要将其元素初始化为特定值,可以对数组的每个索引使用for个循环:
  2.   
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;
        }
    }
}