Home > Mobile >  Is there a way to initialize all int array elements to zero except for loop
Is there a way to initialize all int array elements to zero except for loop

Time:04-01

Is there a way to initialize all int array elements to zero except a for loop where we loop through to set values to zero. Here the size of array is decided by input of user.

#include <stdio.h>

int main() {
  int num_cases = 0;
  scanf("%d", & num_cases);
  int arr_counter[num_cases];
  for (int x = 0; x < num_cases; x  ) {
    arr_counter[x] = 0;
  }
}

CodePudding user response:

Use calloc function available in stdlib.h

#include<stdio.h>
#include<stdlib.h>

int main(){
    int num_cases;
    scanf("%d", &num_cases);
    int* arr = (int*)calloc(num_cases,sizeof(int));
    return 0;
}

CodePudding user response:

Yes, you can do that in multiple ways under C standard. For example:

  1. memset() [Stack and Heap]
  2. calloc() [Heap Only]
  3. loops, e.g., do-while, while and for [Stack and Heap]
  4. { } [Stack Only]

1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int arr[10];
    size_t len_arr = sizeof(arr) / sizeof(*arr);
    
    memset(arr, 0, sizeof(arr));

    for(size_t i = 0; i < len_arr; i  )
        printf("%d\n", arr[i]);

    return EXIT_SUCCESS;
}

Note: We can use memset() to set all values as 0 or -1 for integral data types also. It will not work if we use it to set as other values. The reason is simple, memset() works byte by byte.

2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int *arr = calloc(10, sizeof(int));
    if(!arr)
{
    fprintf(stderr, "bad ptr");
    return EXIT_FAILURE;
}
    for(size_t i = 0; i < 10; i  )
        printf("%d\n", arr[i]);
    
    free(arr);
    return EXIT_SUCCESS;
}

Note: You need to keep track of arr maximum length.

Note: malloc() leaves garbage value in your pointer, whereas calloc() uses memset() to initialize them to 0.

Note: You need to free the heap allocated resource.

3

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    int arr[10];
    size_t len_arr = sizeof(arr) / sizeof(*arr);

    for(size_t i = 0; i < len_arr; i  )
        arr[i] = 0;
    
    for(size_t i = 0; i < len_arr; i  )
        printf("%d\n", arr[i]);

    return EXIT_SUCCESS;
}

Note: You can use any of your favorite loop.

4

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int arr[10] = {};
    size_t len_arr = sizeof(arr) / sizeof(*arr);
    
    for(size_t i = 0; i < len_arr; i  )
        printf("%d\n", arr[i]);

    return EXIT_SUCCESS;
}

CodePudding user response:

To initialize each element of Array you have two approaches:

  1. If you are going for static memory allocation, you can initialize it like this:

    int arr[10] = {};

  2. If you are going for dynamic memory allocation, you can use calloc function.

    int *arr = (int) calloc(numberOfElementsInArray,sizeOfEachElement);

In your case, it would be like:

int *arr_counter = (int*) calloc(num_cases,sizeof(int));

NOTE: You need to include malloc.h header file to use calloc function.

  • Related