int array[]={1,2,3};
Все проблемы заключаются в этом утверждении. На самом деле, Array
, который вы объявили в глобальном пространстве, вообще не доступен. Поскольку вы снова объявили array
в локальном пространстве функции arrayInit
, у нее есть собственный массив. Либо добавьте внешнюю декларацию, либо malloc
.
В некоторых компиляциях, таких как мой (GCC 6.3), вы можете получить желаемый результат, потому что программа короткая, а переменная не имеет доступа к выделенному Initialized Data Segment
. Но существует опасность того, что эти данные будут перезаписаны, поскольку, как только возвращается значение из arrayInit
, память, связанная с локальным array
, освобождается и становится доступной для других переменных.
Правильная версия:
#include<stdio.h>
int array[3]; //global declaration of array
int *arrayInit()
{
extern int array[3];
array[0]=1;
array[1]=2;
array[2]=3;
int* ptr=&array[0];
printf("\nSegment 1 : Through User-Defined Function:");
for(int i=0;i<3;i++)
printf("\n%d\t%p",array[i],&array[i]);
return ptr;
}
void main()
{
int *pointer=arrayInit();
printf("\n\nSegment 2 : Through Main Function:");
for(int i=0;i<3;i++) //will perform the operation 3 times
{
printf("\n%d\t%p",*pointer,pointer);
pointer++;
}
}