I am trying to understand the values/pointers management in arrays.
Imagine an array of 5 elements and altering them from a function outside main. I have to use pointers. I have made this simple program to try to execute it:
#include <stdio.h>
void Mudar (int **cartao2)
{
*cartao2[0] = 5;
*cartao2[1] = 4;
*cartao2[2] = 3;
*cartao2[3] = 2;
*cartao2[4] = 1;
}
int main()
{
int cartao[] = {1,2,3,4,5};
printf("int cartao[] = {");
for (int i = 0; i < 4; i++)
printf("%d,", cartao[i]);
printf("%d};\n",cartao[4]);
Mudar(&cartao);
printf("int cartao[] = {");
for (int i = 0; i < 4; i++)
printf("%d,", cartao[i]);
printf("%d};\n",cartao[4]);
}
This program gives error while executing but only when trying to execute line 5. It even prints
int cartao[] = {1,2,3,4,5};
What is wrong here.
The next step is trying to change a value inside an array of arrays. Any tips to achieve that?
EDIT
As @Stephen Docy point this code now works
#include <stdio.h>
void Mudar (int *cartao2)
{
cartao2[0] = 5;
cartao2[1] = 4;
cartao2[2] = 3;
cartao2[3] = 2;
cartao2[4] = 1;
}
int main()
{
int cartao[] = {1,2,3,4,5};
printf("int cartao[] = {");
for (int i = 0; i < 4; i++)
printf("%d,", cartao[i]);
printf("%d};\n",cartao[4]);
Mudar(cartao);
printf("int cartao[] = {");
for (int i = 0; i < 4; i++)
printf("%d,", cartao[i]);
printf("%d};\n",cartao[4]);
}
And the output is
int cartao[] = {1,2,3,4,5}; int cartao[] = {5,4,3,2,1};
But now I'm curious should't this work the same way?
#include <stdio.h>
void Mudar (int *cartao2)
{
int aux = 25;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cartao2[i][j] = aux;
aux--;
}
}
}
int main()
{
int cartao[5][5];
int aux = 1;
//populates cartao from 1 to 25
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cartao[i][j] = aux;
aux++;
}
}
//prints before changing
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%2d ", cartao[i][j]);
}
printf("\n");
}
Mudar(cartao);
//prints after changing
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%2d ", cartao[i][j]);
}
printf("\n");
}
}
Because the program doesn't even compile:
testes7.c:10: error: pointer expected
But it is used the same way as the code that now works well.