Passing an array by reference in C?

  • (4 Pages)
  • +
  • 1
  • 2
  • 3
  • Last »

47 Replies - 2341 Views - Last Post: 09 October 2017 - 07:57 AM Rate Topic: -----

#1 thaus_15  Icon User is offline

  • D.I.C Head

Reputation: -1
  • View blog
  • Posts: 53
  • Joined: 09-May 17

Passing an array by reference in C?

Posted 29 August 2017 - 12:05 AM

Hi,

I am lot of errors while executing the below code. I don`t have much knowledge in array by reference in C, so Please help me in debugging the codes. It will be grateful.

#include <stdio.h>
#include<math.h>

int codecheck(int col,int col_p,int rows_p,int **h,int x[])
{	int i,j,m,f; //flags
	int sum = 0;
	int y[col];
   
	for (i=0;i<col;i++)
	y[i]=0;
	m=1;
	f=-1;
	for(i=0;i<rows_p;)
	{
		for(j=0;j<rows_p;j++)
		{
			if(h[j][0]==m)
			{
				y[m]=y[m] + x[h[j][1]-1];
					f++;
			}
		}
		y[m]=y[m]%2;
		m=m+1;
		
		i=f+1;
	}

	for (i = 0; i < col; ++i)
		{
			sum =sum+ y[i];
		}
	if (sum == 0)
		{
			return 1;
		}
	else
		{
			return -1;
		}

}

int codesum (int y[],int col)
{
    int sum=0;
    for(int i=0;i<col;i++)
        sum+=y[i];
    
    if(sum>0)
        return 0;
    else
        return 1;
}
void SPADecoderSPADecoder(int &rows_p, double LLR[], int &h, double LLR_ret[], double L_ch[],  double L_dec[], int y[], int &z, int &col)
{
    double temp;
    int i,j,k;
    int col_p;
    for(i=0;i<*rows_p;i++)
    {
        temp=1;
        for(j=0;j<*rows_p;j++)
        {
            if(j!=i && h[j][0]==h[i][0])
            {
                temp=temp * tanhf(LLR[j]/2);
            }
        }


        LLR_ret[i] = log((1 + temp)/(1 - temp));     // lower and upper bounding the LLR

        if(LLR_ret[i] > 40)
        {
            LLR_ret[i]=40;
        }
        else if(LLR_ret[i]<-40)
        {
            LLR_ret[i]=-40;
        }

    }

    for(i=0;i<*col;i++)							// L_dec array used to decide the value of each bit of codeword here it is initalized to LLr value received from channel
    {
        L_dec[i]=L_ch[i];
    }


    for(i=1;i<*col+1;i++)						// LLR values received by the variable nodes are added and stored in L_dec for decision making
    {
        for(j=0;j<*rows_p;j++)
        {
            if(h[j][1]==i)
            {
                L_dec[i-1]=L_dec[i-1]+LLR_ret[j];
            }

        }

        if(L_dec[i-1]<=0)						// decision about the bit values of the received codeword is done her and stored in Y.
        {
            y[i-1]=1;
        }
        else
        {
            y[i-1]=0;
        }

    }


    //z = codesum(y,col);
    z=codecheck(col,col_p,rows_p,h,y); // Syndrome check

    if(z==1)								// if decoded perfectly exit the deoding loop
    {
        return ;
    }
    // updating LLR values on variable nodes side for each variable and check node
    for(i=0;i<rows_p;i++)
    {
        temp=0;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][1]==h[i][1])
            {
                temp=temp + LLR_ret[j];
                k=h[i][1];

            }
        }
        LLR[i] = temp+L_ch[k-1];
    }

}


int main()
{
    
    
	// flags and counters
	int z,i,j,N,k,ber_count,looping,t,sum;
    float d=1;
	float rate=0.5;
	int rows_p=1020,col_p=2;
	int col=204,decoderIterations=20;
   int  ret,row=0;
  							
    float y[col],x[col],noise[col];  // "x" will be used as a codeword and "y" is received codeword.
    double L_ch[col],L_dec[col];    //holds LLR values given by the channel
	double LLR[rows_p],LLR_ret[rows_p];				
	x[col]={0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,1};
	int h[rows_p][col_p]={1,1,1,18,1,27,1,82,1,102,1,103,1,130,1,177,1,190,1,203,2,2,2,15,2,75,2,80,2,86,2,104,2,121,2,141,2,144,2,191,3,3,3,31,3,32,3,42,3,101,3,105,3,153,3,159,3,178,3,199,4,4,4,37,4,71,4,75,4,85,4,106,4,111,4,114,4,127,4,164,5,5,5,17,5,42,5,72,5,87,5,107,5,141,5,158,5,193,5,197,6,4,6,6,6,17,6,78,6,102,6,108,6,162,6,165,6,167,6,174,7,7,7,23,7,73,7,80,7,83,7,109,7,118,7,168,7,177,7,178,8,8,8,33,8,37,8,73,8,100,8,110,8,156,8,173,8,192,8,197,9,9,9,40,9,41,9,88,9,92,9,103,9,111,9,173,9,181,9,199,10,10,10,14,10,23,10,53,10,93,10,107,10,112,10,137,10,167,10,175,11,11,11,19,11,26,11,28,11,88,11,110,11,113,11,116,11,170,11,191,12,1,12,12,12,25,12,86,12,97,12,108,12,114,12,124,12,161,12,192,13,4,13,13,13,33,13,34,13,50,13,115,13,137,13,140,13,146,13,160,14,14,14,31,14,40,14,58,14,95,14,116,14,121,14,166,14,174,14,203,15,15,15,68,15,70,15,87,15,101,15,109,15,113,15,117,15,165,15,180,16,4,16,16,16,59,16,67,16,92,16,118,16,125,16,131,16,138,16,151,17,15,17,17,17,44,17,71,17,73,17,119,17,161,17,190,17,194,17,198,18,18,18,47,18,62,18,85,18,93,18,120,18,122,18,125,18,146,18,181,19,19,19,22,19,23,19,37,19,57,19,121,19,126,19,130,19,131,19,143,20,1,20,20,20,50,20,51,20,99,20,106,20,122,20,169,20,179,20,200,21,21,21,32,21,62,21,72,21,98,21,123,21,126,21,154,21,168,21,204,22,22,22,31,22,44,22,89,22,98,22,124,22,141,22,160,22,169,22,176,23,23,23,32,23,61,23,65,23,99,23,125,23,132,23,133,23,147,23,152,24,16,24,24,24,42,24,73,24,77,24,126,24,142,24,145,24,146,24,147,25,5,25,24,25,25,25,55,25,67,25,127,25,133,25,165,25,178,25,185,26,10,26,26,26,27,26,40,26,85,26,128,26,147,26,155,26,160,26,200,27,22,27,27,27,42,27,50,27,74,27,108,27,129,27,154,27,170,27,195,28,2,28,28,28,63,28,67,28,94,28,130,28,150,28,171,28,187,28,192,29,29,29,48,29,69,29,79,29,90,29,116,29,131,29,159,29,176,29,200,30,7,30,30,30,53,30,58,30,94,30,127,30,132,30,140,30,162,30,189,31,29,31,31,31,64,31,77,31,94,31,117,31,133,31,167,31,183,31,190,32,20,32,30,32,32,32,74,32,78,32,115,32,134,32,151,32,181,32,194,33,11,33,33,33,47,33,76,33,81,33,109,33,135,33,154,33,155,33,179,34,2,34,7,34,34,34,71,34,76,34,136,34,138,34,159,34,182,34,183,35,27,35,29,35,35,35,60,35,86,35,123,35,137,35,149,35,166,35,189,36,17,36,35,36,36,36,48,36,100,36,138,36,139,36,146,36,163,36,168,37,5,37,34,37,37,37,38,37,69,37,117,37,139,37,145,37,169,37,203,38,38,38,56,38,76,38,92,38,101,38,106,38,123,38,140,38,161,38,170,39,39,39,41,39,60,39,76,39,78,39,125,39,141,39,142,39,175,39,198,40,2,40,35,40,40,40,43,40,93,40,114,40,135,40,142,40,148,40,158,41,1,41,2,41,13,41,41,41,59,41,109,41,119,41,132,41,143,41,157,42,11,42,42,42,43,42,92,42,95,42,115,42,117,42,144,42,156,42,204,43,7,43,9,43,43,43,45,43,56,43,122,43,145,43,192,43,194,43,201,44,10,44,44,44,75,44,83,44,95,44,110,44,135,44,146,44,157,44,180,45,45,45,63,45,79,45,81,45,97,45,127,45,139,45,147,45,148,45,195,46,34,46,46,46,61,46,66,46,77,46,105,46,144,46,148,46,197,46,201,47,14,47,20,47,46,47,47,47,83,47,124,47,128,47,132,47,149,47,159,48,8,48,13,48,26,48,48,48,62,48,149,48,150,48,174,48,193,48,195,49,15,49,21,49,25,49,49,49,51,49,145,49,149,49,151,49,177,49,188,50,8,50,49,50,50,50,54,50,89,50,105,50,126,50,152,50,164,50,165,51,43,51,51,51,66,51,68,51,91,51,131,51,133,51,153,51,187,51,189,52,1,52,39,52,45,52,52,52,54,52,110,52,140,52,150,52,154,52,163,53,8,53,53,53,60,53,64,53,90,53,138,53,155,53,157,53,194,53,204,54,12,54,28,54,54,54,60,54,82,54,112,54,139,54,151,54,156,54,183,55,3,55,17,55,37,55,55,55,99,55,112,55,148,55,157,55,172,55,189,56,20,56,31,56,56,56,80,56,91,56,152,56,156,56,158,56,162,56,180,57,28,57,57,57,66,57,81,57,89,57,134,57,137,57,159,57,172,57,196,58,5,58,58,58,70,58,78,58,91,58,118,58,149,58,154,58,160,58,201,59,18,59,24,59,59,59,88,59,96,59,150,59,152,59,161,59,179,59,183,60,21,60,38,60,55,60,59,60,60,60,162,60,176,60,187,60,190,60,197,61,61,61,69,61,74,61,93,61,101,61,111,61,128,61,163,61,193,61,196,62,6,62,7,62,35,62,62,62,96,62,103,62,113,62,129,62,164,62,200,63,16,63,27,63,44,63,63,63,88,63,121,63,134,63,165,63,175,63,188,64,4,64,26,64,64,64,79,64,84,64,119,64,134,64,136,64,166,64,168,65,12,65,13,65,52,65,57,65,65,65,106,65,138,65,142,65,167,65,176,66,24,66,30,66,52,66,66,66,102,66,112,66,117,66,122,66,135,66,168,67,6,67,57,67,67,67,85,67,97,67,140,67,169,67,182,67,184,67,186,68,6,68,58,68,68,68,71,68,90,68,134,68,143,68,145,68,152,68,170,69,54,69,57,69,59,69,69,69,77,69,103,69,104,69,114,69,136,69,171,70,19,70,24,70,56,70,70,70,100,70,105,70,114,70,128,70,129,70,172,71,14,71,52,71,63,71,70,71,71,71,120,71,169,71,173,71,178,71,196,72,11,72,25,72,39,72,66,72,72,72,120,72,130,72,132,72,174,72,199,73,48,73,49,73,64,73,73,73,98,73,111,73,175,73,179,73,201,73,202,74,9,74,15,74,58,74,74,74,84,74,107,74,120,74,135,74,164,74,176,75,28,75,41,75,70,75,75,75,96,75,133,75,155,75,166,75,177,75,202,76,26,76,45,76,65,76,76,76,94,76,144,76,158,76,172,76,178,76,203,77,10,77,13,77,77,77,84,77,87,77,127,77,151,77,163,77,179,77,191,78,49,78,55,78,65,78,78,78,90,78,122,78,130,78,139,78,180,78,182,79,33,79,43,79,67,79,79,79,99,79,123,79,141,79,181,79,188,79,202,80,18,80,19,80,35,80,46,80,80,80,153,80,167,80,182,80,188,80,193,81,9,81,16,81,36,81,55,81,81,81,143,81,160,81,183,81,186,81,191,82,10,82,11,82,79,82,82,82,96,82,108,82,111,82,126,82,172,82,184,83,12,83,36,83,69,83,83,83,87,83,148,83,174,83,185,83,202,83,204,84,45,84,47,84,48,84,75,84,84,84,108,84,123,84,142,84,153,84,186,85,9,85,46,85,53,85,54,85,85,85,115,85,121,85,129,85,177,85,187,86,22,86,64,86,83,86,86,86,91,86,107,86,116,86,171,86,188,86,199,87,8,87,22,87,61,87,81,87,87,87,104,87,120,87,182,87,189,87,198,88,32,88,33,88,39,88,51,88,88,88,129,88,143,88,171,88,180,88,190,89,3,89,21,89,52,89,89,89,100,89,103,89,109,89,115,89,125,89,191,90,20,90,40,90,44,90,61,90,90,90,118,90,137,90,153,90,184,90,192,91,6,91,23,91,29,91,84,91,91,91,144,91,155,91,173,91,185,91,193,92,14,92,49,92,72,92,92,92,102,92,147,92,171,92,185,92,186,92,194,93,5,93,21,93,29,93,65,93,93,93,105,93,110,93,119,93,184,93,195,94,39,94,80,94,82,94,94,94,98,94,107,94,113,94,131,94,166,94,196,95,30,95,47,95,50,95,63,95,95,95,104,95,118,95,161,95,163,95,197,96,25,96,34,96,56,96,68,96,96,96,116,96,181,96,186,96,196,96,198,97,36,97,38,97,46,97,89,97,97,97,113,97,136,97,150,97,157,97,199,98,3,98,12,98,18,98,30,98,98,98,136,98,170,98,187,98,198,98,200,99,53,99,62,99,74,99,97,99,99,99,104,99,119,99,156,99,185,99,201,100,16,100,68,100,82,100,95,100,100,100,106,100,124,100,158,100,195,100,202,101,19,101,36,101,41,101,72,101,101,101,112,101,124,101,162,101,164,101,203,102,3,102,38,102,51,102,86,102,102,102,128,102,173,102,175,102,184,102,204};;

 
 
                        for(looping=0;looping<decoderIterations;looping++)
						{
							
                            SPADecoder(&rows_p, LLR, &h, LLR_ret, L_ch, L_dec, y, &z, &col);
                    printf("%d",  y[looping]);
						}

	
return 0;
		
	
}


Compilation Error Messages

prog.c:56:31: error: expected ';', ',' or ')' before '&' token
 void SPADecoderSPADecoder(int &rows_p, double LLR[], int &h, double LLR_ret[], double L_ch[],  double L_dec[], int y[], int &z, int &col)
                               ^
prog.c: In function 'main':
prog.c:156:9: error: expected expression before '{' token
  x[col]={0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,1};
         ^
prog.c:157:2: error: variable-sized object may not be initialized
  int h[rows_p][col_p]={1,1,1,18,1,27,1,82,1,102,1,103,1,130,1,177,1,190,1,203,2,2,2,15,2,75,2,80,2,86,2,104,2,121,2,141,2,144,2,191,3,3,3,31,3,32,3,42,3,101,3,105,3,153,3,159,3,178,3,199,4,4,4,37,4,71,4,75,4,85,4,106,4,111,4,114,4,127,4,164,5,5,5,17,5,42,5,72,5,87,5,107,5,141,5,158,5,193,5,197,6,4,6,6,6,17,6,78,6,102,6,108,6,162,6,165,6,167,6,174,7,7,7,23,7,73,7,80,7,83,7,109,7,118,7,168,7,177,7,178,8,8,8,33,8,37,8,73,8,100,8,110,8,156,8,173,8,192,8,197,9,9,9,40,9,41,9,88,9,92,9,103,9,111,9,173,9,181,9,199,10,10,10,14,10,23,10,53,10,93,10,107,10,112,10,137,10,167,10,175,11,11,11,19,11,26,11,28,11,88,11,110,11,113,11,116,11,170,11,191,12,1,12,12,12,25,12,86,12,97,12,108,12,114,12,124,12,161,12,192,13,4,13,13,13,33,13,34,13,50,13,115,13,137,13,140,13,146,13,160,14,14,14,31,14,40,14,58,14,95,14,116,14,121,14,166,14,174,14,203,15,15,15,68,15,70,15,87,15,101,15,109,15,113,15,117,15,165,15,180,16,4,16,16,16,59,16,67,16,92,16,118,16,125,16,131,16,138,16,151,17,15,17,17,17,44,17,71,17,73,17,119,17,161,17,190,17,194,17,198,18,18,18,47,18,62,18,85,18,93,18,120,18,122,18,125,18,146,18,181,19,19,19,22,19,23,19,37,19,57,19,121,19,126,19,130,19,131,19,143,20,1,20,20,20,50,20,51,20,99,20,106,20,122,20,169,20,179,20,200,21,21,21,32,21,62,21,72,21,98,21,123,21,126,21,154,21,168,21,204,22,22,22,31,22,44,22,89,22,98,22,124,22,141,22,160,22,169,22,176,23,23,23,32,23,61,23,65,23,99,23,125,23,132,23,133,23,147,23,152,24,16,24,24,24,42,24,73,24,77,24,126,24,142,24,145,24,146,24,147,25,5,25,24,25,25,25,55,25,67,25,127,25,133,25,165,25,178,25,185,26,10,26,26,26,27,26,40,26,85,26,128,26,147,26,155,26,160,26,200,27,22,27,27,27,42,27,50,27,74,27,108,27,129,27,154,27,170,27,195,28,2,28,28,28,63,28,67,28,94,28,130,28,150,28,171,28,187,28,192,29,29,29,48,29,69,29,79,29,90,29,116,29,131,29,159,29,176,29,200,30,7,30,30,30,53,30,58,30,94,30,127,30,132,30,140,30,162,30,189,31,29,31,31,31,64,31,77,31,94,31,117,31,133,31,167,31,183,31,190,32,20,32,30,32,32,32,74,32,78,32,115,32,134,32,151,32,181,32,194,33,11,33,33,33,47,33,76,33,81,33,109,33,135,33,154,33,155,33,179,34,2,34,7,34,34,34,71,34,76,34,136,34,138,34,159,34,182,34,183,35,27,35,29,35,35,35,60,35,86,35,123,35,137,35,149,35,166,35,189,36,17,36,35,36,36,36,48,36,100,36,138,36,139,36,146,36,163,36,168,37,5,37,34,37,37,37,38,37,69,37,117,37,139,37,145,37,169,37,203,38,38,38,56,38,76,38,92,38,101,38,106,38,123,38,140,38,161,38,170,39,39,39,41,39,60,39,76,39,78,39,125,39,141,39,142,39,175,39,198,40,2,40,35,40,40,40,43,40,93,40,114,40,135,40,142,40,148,40,158,41,1,41,2,41,13,41,41,41,59,41,109,41,119,41,132,41,143,41,157,42,11,42,42,42,43,42,92,42,95,42,115,42,117,42,144,42,156,42,204,43,7,43,9,43,43,43,45,43,56,43,122,43,145,43,192,43,194,43,201,44,10,44,44,44,75,44,83,44,95,44,110,44,135,44,146,44,157,44,180,45,45,45,63,45,79,45,81,45,97,45,127,45,139,45,147,45,148,45,195,46,34,46,46,46,61,46,66,46,77,46,105,46,144,46,148,46,197,46,201,47,14,47,20,47,46,47,47,47,83,47,124,47,128,47,132,47,149,47,159,48,8,48,13,48,26,48,48,48,62,48,149,48,150,48,174,48,193,48,195,49,15,49,21,49,25,49,49,49,51,49,145,49,149,49,151,49,177,49,188,50,8,50,49,50,50,50,54,50,89,50,105,50,126,50,152,50,164,50,165,51,43,51,51,51,66,51,68,51,91,51,131,51,133,51,153,51,187,51,189,52,1,52,39,52,45,52,52,52,54,52,110,52,140,52,150,52,154,52,163,53,8,53,53,53,60,53,64,53,90,53,138,53,155,53,157,53,194,53,204,54,12,54,28,54,54,54,60,54,82,54,112,54,139,54,151,54,156,54,183,55,3,55,17,55,37,55,55,55,99,55,112,55,148,55,157,55,172,55,189,56,20,56,31,56,56,56,80,56,91,56,152,56,156,56,158,56,162,56,180,57,28,57,57,57,66,57,81,57,89,57,134,57,137,57,159,57,172,57,196,58,5,58,58,58,70,58,78,58,91,58,118,58,149,58,154,58,160,58,201,59,18,59,24,59,59,59,88,59,96,59,150,59,152,59,161,59,179,59,183,60,21,60,38,60,55,60,59,60,60,60,162,60,176,60,187,60,190,60,197,61,61,61,69,61,74,61,93,61,101,61,111,61,128,61,163,61,193,61,196,62,6,62,7,62,35,62,62,62,96,62,103,62,113,62,129,62,164,62,200,63,16,63,27,63,44,63,63,63,88,63,121,63,134,63,165,63,175,63,188,64,4,64,26,64,64,64,79,64,84,64,119,64,134,64,136,64,166,64,168,65,12,65,13,65,52,65,57,65,65,65,106,65,138,65,142,65,167,65,176,66,24,66,30,66,52,66,66,66,102,66,112,66,117,66,122,66,135,66,168,67,6,67,57,67,67,67,85,67,97,67,140,67,169,67,182,67,184,67,186,68,6,68,58,68,68,68,71,68,90,68,134,68,143,68,145,68,152,68,170,69,54,69,57,69,59,69,69,69,77,69,103,69,104,69,114,69,136,69,171,70,19,70,24,70,56,70,70,70,100,70,105,70,114,70,128,70,129,70,172,71,14,71,52,71,63,71,70,71,71,71,120,71,169,71,173,71,178,71,196,72,11,72,25,72,39,72,66,72,72,72,120,72,130,72,132,72,174,72,199,73,48,73,49,73,64,73,73,73,98,73,111,73,175,73,179,73,201,73,202,74,9,74,15,74,58,74,74,74,84,74,107,74,120,74,135,74,164,74,176,75,28,75,41,75,70,75,75,75,96,75,133,75,155,75,166,75,177,75,202,76,26,76,45,76,65,76,76,76,94,76,144,76,158,76,172,76,178,76,203,77,10,77,13,77,77,77,84,77,87,77,127,77,151,77,163,77,179,77,191,78,49,78,55,78,65,78,78,78,90,78,122,78,130,78,139,78,180,78,182,79,33,79,43,79,67,79,79,79,99,79,123,79,141,79,181,79,188,79,202,80,18,80,19,80,35,80,46,80,80,80,153,80,167,80,182,80,188,80,193,81,9,81,16,81,36,81,55,81,81,81,143,81,160,81,183,81,186,81,191,82,10,82,11,82,79,82,82,82,96,82,108,82,111,82,126,82,172,82,184,83,12,83,36,83,69,83,83,83,87,83,148,83,174,83,185,83,202,83,204,84,45,84,47,84,48,84,75,84,84,84,108,84,123,84,142,84,153,84,186,85,9,85,46,85,53,85,54,85,85,85,115,85,121,85,129,85,177,85,187,86,22,86,64,86,83,86,86,86,91,86,107,86,116,86,171,86,188,86,199,87,8,87,22,87,61,87,81,87,87,87,104,87,120,87,182,87,189,87,198,88,32,88,33,88,39,88,51,88,88,88,129,88,143,88,171,88,180,88,190,89,3,89,21,89,52,89,89,89,100,89,103,89,109,89,115,89,125,89,191,90,20,90,40,90,44,90,61,90,90,90,118,90,137,90,153,90,184,90,192,91,6,91,23,91,29,91,84,91,91,91,144,91,155,91,173,91,185,91,193,92,14,92,49,92,72,92,92,92,102,92,147,92,171,92,185,92,186,92,194,93,5,93,21,93,29,93,65,93,93,93,105,93,110,93,119,93,184,93,195,94,39,94,80,94,82,94,94,94,98,94,107,94,113,94,131,94,166,94,196,95,30,95,47,95,50,95,63,95,95,95,104,95,118,95,161,95,163,95,197,96,25,96,34,96,56,96,68,96,96,96,116,96,181,96,186,96,196,96,198,97,36,97,38,97,46,97,89,97,97,97,113,97,136,97,150,97,157,97,199,98,3,98,12,98,18,98,30,98,98,98,136,98,170,98,187,98,198,98,200,99,53,99,62,99,74,99,97,99,99,99,104,99,119,99,156,99,185,99,201,100,16,100,68,100,82,100,95,100,100,100,106,100,124,100,158,100,195,100,202,101,19,101,36,101,41,101,72,101,101,101,112,101,124,101,162,101,164,101,203,102,3,102,38,102,51,102,86,102,102,102,128,102,173,102,175,102,184,102,204};;
  ^
prog.c:157:24: warning: excess elements in array initializer
  int h[rows_p][col_p]=                                   ^
prog.c:157:40: note: (near initialization for 'h')
prog.c:157:40: warning: excess elements in array initializer
prog.c:157:40: note: (near initialization for 'h[0]')
prog.c:157:43: warning: excess elements in array initializer



Is This A Good Question/Topic? 0
  • +

Replies To: Passing an array by reference in C?

#2 andrewsw  Icon User is offline

  • say what now
  • member icon

Reputation: 6409
  • View blog
  • Posts: 25,892
  • Joined: 12-December 12

Re: Passing an array by reference in C?

Posted 29 August 2017 - 12:25 AM

Is this someone else's code?
What do you think the problem might be with line 56?
Was This Post Helpful? 0
  • +
  • -

#3 Thomas1965  Icon User is offline

  • D.I.C Regular

Reputation: 66
  • View blog
  • Posts: 283
  • Joined: 09-September 16

Re: Passing an array by reference in C?

Posted 29 August 2017 - 12:27 AM

What are horrible mishmash of C and C++.
Sometimes you use pointers, sometimes references.
I think the first decision you should make is what do you want to use - C or C++?
These are two different languages.
If you decide to go for C++ it is probably best to start again using vectors.
Also it would be very helpful to use meaningful variable names an add a short comment on top of the function saying what it is supposed to do.
Was This Post Helpful? 0
  • +
  • -

#4 thaus_15  Icon User is offline

  • D.I.C Head

Reputation: -1
  • View blog
  • Posts: 53
  • Joined: 09-May 17

Re: Passing an array by reference in C?

Posted 29 August 2017 - 12:30 AM

View Postandrewsw, on 29 August 2017 - 12:25 AM, said:

Is this someone else's code?
What do you think the problem might be with line 56?


That is a C++ style function using references. C does not know references. But i don`t know how to modify array references.

View PostThomas1965, on 29 August 2017 - 12:27 AM, said:

What are horrible mishmash of C and C++.
Sometimes you use pointers, sometimes references.
I think the first decision you should make is what do you want to use - C or C++?
These are two different languages.
If you decide to go for C++ it is probably best to start again using vectors.
Also it would be very helpful to use meaningful variable names an add a short comment on top of the function saying what it is supposed to do.


Ya, you are right. The code is mishmash of C and C++. For my Project needs, i have converted from MATLAB codes.
Was This Post Helpful? 0
  • +
  • -

#5 Thomas1965  Icon User is offline

  • D.I.C Regular

Reputation: 66
  • View blog
  • Posts: 283
  • Joined: 09-September 16

Re: Passing an array by reference in C?

Posted 29 August 2017 - 01:33 AM

What do you want to use C or C++ ?
Was This Post Helpful? 0
  • +
  • -

#6 thaus_15  Icon User is offline

  • D.I.C Head

Reputation: -1
  • View blog
  • Posts: 53
  • Joined: 09-May 17

Re: Passing an array by reference in C?

Posted 29 August 2017 - 01:36 AM

View PostThomas1965, on 29 August 2017 - 01:33 AM, said:

What do you want to use C or C++ ?


I need C language to make my hardware device run. Please help. Its urgent.

Thanks
Was This Post Helpful? 0
  • +
  • -

#7 jimblumberg  Icon User is online

  • member icon

Reputation: 5344
  • View blog
  • Posts: 16,678
  • Joined: 25-December 09

Re: Passing an array by reference in C?

Posted 29 August 2017 - 07:01 AM

Quote

I need C language to make my hardware device run.

Well in C to pass by reference means passing by pointer.

Look at this snippet:
void SPADecoderSPADecoder(int &rows_p, double LLR[], int &h, double LLR_ret[], double L_ch[],  double L_dec[], int y[], int &z, int &col)




Why are you trying to pass rows_p, z, and col by reference? Why not just pass those variables by value, you don't seem to be changing the value of any of those variables so there is no real need to pass by "reference".

void SPADecoderSPADecoder(int rows_p, double LLR[], int **h, double LLR_ret[], double L_ch[],  double L_dec[], int y[], int z, int col)



Now this means that you will need to remove the * from in front of these variables inside the function.


Jim
Was This Post Helpful? 0
  • +
  • -

#8 Skydiver  Icon User is offline

  • Code herder
  • member icon

Reputation: 5922
  • View blog
  • Posts: 20,251
  • Joined: 05-May 12

Re: Passing an array by reference in C?

Posted 29 August 2017 - 09:16 AM

And both in C and C++, arrays are already passed by reference so you don't have to do anything special.
Was This Post Helpful? 0
  • +
  • -

#9 baavgai  Icon User is offline

  • Dreaming Coder
  • member icon


Reputation: 6996
  • View blog
  • Posts: 14,634
  • Joined: 16-October 07

Re: Passing an array by reference in C?

Posted 29 August 2017 - 09:22 AM

I'd start by getting rid of your magic numbers. e.g.
#define COL 204
#define ROWS_P 1020
#define COLS_P 2



I'd then reconsider how you load your starting data. A function would be nice:
void load_h(int h[ROWS_P][COLS_P]) {
    h[0][0] = 1; h[0][1] = 1;
    h[1][0] = 1; h[1][1] = 18;
    h[2][0] = 1; h[2][1] = 27;
    // ...
    h[646][0] = 65; h[646][1] = 138;
}



You will note that is the extent of your data, so it's your 1020 that is causing one of your errors.

The 2D array seems confusing. Perhaps an array of struct?
Was This Post Helpful? 0
  • +
  • -

#10 thaus_15  Icon User is offline

  • D.I.C Head

Reputation: -1
  • View blog
  • Posts: 53
  • Joined: 09-May 17

Re: Passing an array by reference in C?

Posted 30 August 2017 - 12:14 AM

Can anyone explain me ? double pointer notation as int **h in codes.

This post has been edited by andrewsw: 30 August 2017 - 12:20 AM
Reason for edit:: Removed previous quote, just press REPLY

Was This Post Helpful? 0
  • +
  • -

#11 Skydiver  Icon User is offline

  • Code herder
  • member icon

Reputation: 5922
  • View blog
  • Posts: 20,251
  • Joined: 05-May 12

Re: Passing an array by reference in C?

Posted 30 August 2017 - 11:47 AM

There are two ways to create two dimensional arrays in C. One way is to have all the integers in memory contiguously, but that requires that the compiler knows how many columns there are for each row. The second approach is to have an array of pointers to integers, where each pointer points to a array of integers which represents a row. That parameter declaration there follows the second approach.

I suggest reading up more on how arrays are passed as function parameters.
Was This Post Helpful? 0
  • +
  • -

#12 thaus_15  Icon User is offline

  • D.I.C Head

Reputation: -1
  • View blog
  • Posts: 53
  • Joined: 09-May 17

Re: Passing an array by reference in C?

Posted 30 August 2017 - 10:55 PM

I am beginner of programming language C and am having trouble passing the pointer of a 2D array to another function that then prints the 2D array. Any help would be appreciated.

#include <stdio.h>

#define col 204
#define col_p 2
#define rows_p 1020

int codecheck(int col,int col_p,int rows_p,int **h,int x[])
{	int i,j,m,f; //flags
	int sum = 0;
	int y[col];
	
	for (i=0;i<col;i++)
	y[i]=0;
	m=1;
	f=-1;
	for(i=0;i<rows_p;)							 
	{			
		for(j=0;j<rows_p;j++)
		{
			if(H[j][0]==m)
			{		
				y[m]=y[m] + x[h[j][1]-1];
					f++;
			}
		}
		y[m]=y[m]%2;
		m=m+1;
		i=f+1;
	}

	for (i = 0; i < col; ++i) 
		{
			sum =sum+ y[i];
		}
	if (sum == 0) 
		{
			return 1;
		}
	else
		{	
			return -1;
		}
				
}

int codesum (int y[],int col)
{
    int sum=0;
    for(int i=0;i<col;i++)
        sum+=y[i];
    //cout<< "sum="<< sum<<endl;
    if(sum>0)
        return 0;
    else
        return 1;
}

void SPADecoder(int rows_p, double LLR[], int *h, double LLR_ret[], double L_ch[],  double L_dec[], int y[], int z, int col)
{
    double temp;
	int col_p;
    int i,j,k;
    for(i=0;i<rows_p;i++)
    {
        temp=1;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][0]==h[i][0])
            {
                temp=temp * tanhf(LLR[j]/2);
            }
        }
								
								
        LLR_ret[i] = log((1 + temp)/(1 - temp));     // lower and upper bounding the LLR
								
        if(LLR_ret[i] > 40)
        {
            LLR_ret[i]=40;
        }
        else if(LLR_ret[i]<-40)
        {
            LLR_ret[i]=-40;
        }
        
    }
    
    for(i=0;i<col;i++)							// L_dec array used to decide the value of each bit of codeword here it is initalized to LLr value received from channel
    {
        L_dec[i]=L_ch[i];
    }
    
    
    for(i=1;i<col+1;i++)						// LLR values received by the variable nodes are added and stored in L_dec for decision making
    {
        for(j=0;j<rows_p;j++)
        {
            if(h[j][1]==i)
            {
                L_dec[i-1]=L_dec[i-1]+LLR_ret[j];
            }
            
        }
        
        if(L_dec[i-1]<=0)						// decision about the bit values of the received codeword is done her and stored in Y.
        {
            y[i-1]=1;
        }
        else
        {
            y[i-1]=0;
        }
        
    }
    
    
    //z = codesum(y,col);
    z=codecheck(col, col_p,rows_p,h,y); // checking whether the decoded codeword is all zero or not
    
    if(z==1)								// if decoded perfectly exit the deoding loop
    {
        return ;
    }
    // updating LLR values on variable nodes side for each variable and check node
    for(i=0;i<rows_p;i++)
    {
        temp=0;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][1]==h[i][1])
            {
                temp=temp + LLR_ret[j];
                k=h[i][1];
                
            }
        }
        LLR[i] = temp+L_ch[k-1];
    }

}

int main()
{
    
    
	// flags and counters
	int z,i,j,N,k,ber_count,looping,t,sum;
    float d=1;
	float rate=0.5;
	int rows_p,col_p;
	int col,maxTransmissions=4000,decoderIterations=20,maxErrors=100,errorsAccumulated=0;			// iterations gives the maximum number of time the decoder is run for each value of SNR

    

	double var,snr;
	double temp; 								/
	
    
    float y[col],x[col],noise[col];  // "x" will be used as a codeword and "y" is received codeword.
    double L_ch[col],L_dec[col];    //holds LLR values given by the channel
	double LLR[rows_p],LLR_ret[rows_p];					//hold updated LLR values at variable node and check node respectively
	double BER[11];												// BER array one for each SNR as SNR is varied from 0-10 in steps of 1
    float snr_db[]={0,1,2,3,4};
    int snr_range=5,snr_count;
	
    int  ret,row=0;
	double error_bits,error;
    // Set Field Separator here

    int modulationScheme = 0,noOfSymbols;
//    cout<< "Enter modulation sceme to be used \n Enter 0 for BPSK \n Enter 1 for QPSK \n Enter 2 for QAM-16"<<endl;
//    cin>>modulationScheme;
    
int h[rows_p][col_p]={{1,1},{1,18},{1,27},{1,82},{1,102},{1,103},{1,130},{1,177},{1,190},{1,203},{2,2},{2,15},{2,75},{2,80},{2,86},{2,104},{2,121},{2,141},{2,144},{2,191},{3,3},{3,31},{3,32},{3,42},{3,101},{3,105},{3,153},{3,159},{3,178},{3,199},{4,4},{4,37},{4,71},{4,75},{4,85},{4,106},{4,111},{4,114},{4,127},{4,164},{5,5},{5,17},{5,42},{5,72},{5,87},{5,107},{5,141},{5,158},{5,193},{5,197},{6,4},{6,6},{6,17},{6,78},{6,102},{6,108},{6,162},{6,165},{6,167},{6,174},{7,7},{7,23},{7,73},{7,80},{7,83},{7,109},{7,118},{7,168},{7,177},{7,178},{8,8},{8,33},{8,37},{8,73},{8,100},{8,110},{8,156},{8,173},{8,192},{8,197},{9,9},{9,40},{9,41},{9,88},{9,92},{9,103},{9,111},{9,173},{9,181},{9,199},{10,10},{10,14},{10,23},{10,53},{10,93},{10,107},{10,112},{10,137},{10,167},{10,175},{11,11},{11,19},{11,26},{11,28},{11,88},{11,110},{11,113},{11,116},{11,170},{11,191},{12,1},{12,12},{12,25},{12,86},{12,97},{12,108},{12,114},{12,124},{12,161},{12,192},{13,4},{13,13},{13,33},{13,34},{13,50},{13,115},{13,137},{13,140},{13,146},{13,160},{14,14},{14,31},{14,40},{14,58},{14,95},{14,116},{14,121},{14,166},{14,174},{14,203},{15,15},{15,68},{15,70},{15,87},{15,101},{15,109},{15,113},{15,117},{15,165},{15,180},{16,4},{16,16},{16,59},{16,67},{16,92},{16,118},{16,125},{16,131},{16,138},{16,151},{17,15},{17,17},{17,44},{17,71},{17,73},{17,119},{17,161},{17,190},{17,194},{17,198},{18,18},{18,47},{18,62},{18,85},{18,93},{18,120},{18,122},{18,125},{18,146},{18,181},{19,19},{19,22},{19,23},{19,37},{19,57},{19,121},{19,126},{19,130},{19,131},{19,143},{20,1},{20,20},{20,50},{20,51},{20,99},{20,106},{20,122},{20,169},{20,179},{20,200},{21,21},{21,32},{21,62},{21,72},{21,98},{21,123},{21,126},{21,154},{21,168},{21,204},{22,22},{22,31},{22,44},{22,89},{22,98},{22,124},{22,141},{22,160},{22,169},{22,176},{23,23},{23,32},{23,61},{23,65},{23,99},{23,125},{23,132},{23,133},{23,147},{23,152},{24,16},{24,24},{24,42},{24,73},{24,77},{24,126},{24,142},{24,145},{24,146},{24,147},{25,5},{25,24},{25,25},{25,55},{25,67},{25,127},{25,133},{25,165},{25,178},{25,185},{26,10},{26,26},{26,27},{26,40},{26,85},{26,128},{26,147},{26,155},{26,160},{26,200},{27,22},{27,27},{27,42},{27,50},{27,74},{27,108},{27,129},{27,154},{27,170},{27,195},{28,2},{28,28},{28,63},{28,67},{28,94},{28,130},{28,150},{28,171},{28,187},{28,192},{29,29},{29,48},{29,69},{29,79},{29,90},{29,116},{29,131},{29,159},{29,176},{29,200},{30,7},{30,30},{30,53},{30,58},{30,94},{30,127},{30,132},{30,140},{30,162},{30,189},{31,29},{31,31},{31,64},{31,77},{31,94},{31,117},{31,133},{31,167},{31,183},{31,190},{32,20},{32,30},{32,32},{32,74},{32,78},{32,115},{32,134},{32,151},{32,181},{32,194},{33,11},{33,33},{33,47},{33,76},{33,81},{33,109},{33,135},{33,154},{33,155},{33,179},{34,2},{34,7},{34,34},{34,71},{34,76},{34,136},{34,138},{34,159},{34,182},{34,183},{35,27},{35,29},{35,35},{35,60},{35,86},{35,123},{35,137},{35,149},{35,166},{35,189},{36,17},{36,35},{36,36},{36,48},{36,100},{36,138},{36,139},{36,146},{36,163},{36,168},{37,5},{37,34},{37,37},{37,38},{37,69},{37,117},{37,139},{37,145},{37,169},{37,203},{38,38},{38,56},{38,76},{38,92},{38,101},{38,106},{38,123},{38,140},{38,161},{38,170},{39,39},{39,41},{39,60},{39,76},{39,78},{39,125},{39,141},{39,142},{39,175},{39,198},{40,2},{40,35},{40,40},{40,43},{40,93},{40,114},{40,135},{40,142},{40,148},{40,158},{41,1},{41,2},{41,13},{41,41},{41,59},{41,109},{41,119},{41,132},{41,143},{41,157},{42,11},{42,42},{42,43},{42,92},{42,95},{42,115},{42,117},{42,144},{42,156},{42,204},{43,7},{43,9},{43,43},{43,45},{43,56},{43,122},{43,145},{43,192},{43,194},{43,201},{44,10},{44,44},{44,75},{44,83},{44,95},{44,110},{44,135},{44,146},{44,157},{44,180},{45,45},{45,63},{45,79},{45,81},{45,97},{45,127},{45,139},{45,147},{45,148},{45,195},{46,34},{46,46},{46,61},{46,66},{46,77},{46,105},{46,144},{46,148},{46,197},{46,201},{47,14},{47,20},{47,46},{47,47},{47,83},{47,124},{47,128},{47,132},{47,149},{47,159},{48,8},{48,13},{48,26},{48,48},{48,62},{48,149},{48,150},{48,174},{48,193},{48,195},{49,15},{49,21},{49,25},{49,49},{49,51},{49,145},{49,149},{49,151},{49,177},{49,188},{50,8},{50,49},{50,50},{50,54},{50,89},{50,105},{50,126},{50,152},{50,164},{50,165},{51,43},{51,51},{51,66},{51,68},{51,91},{51,131},{51,133},{51,153},{51,187},{51,189},{52,1},{52,39},{52,45},{52,52},{52,54},{52,110},{52,140},{52,150},{52,154},{52,163},{53,8},{53,53},{53,60},{53,64},{53,90},{53,138},{53,155},{53,157},{53,194},{53,204},{54,12},{54,28},{54,54},{54,60},{54,82},{54,112},{54,139},{54,151},{54,156},{54,183},{55,3},{55,17},{55,37},{55,55},{55,99},{55,112},{55,148},{55,157},{55,172},{55,189},{56,20},{56,31},{56,56},{56,80},{56,91},{56,152},{56,156},{56,158},{56,162},{56,180},{57,28},{57,57},{57,66},{57,81},{57,89},{57,134},{57,137},{57,159},{57,172},{57,196},{58,5},{58,58},{58,70},{58,78},{58,91},{58,118},{58,149},{58,154},{58,160},{58,201},{59,18},{59,24},{59,59},{59,88},{59,96},{59,150},{59,152},{59,161},{59,179},{59,183},{60,21},{60,38},{60,55},{60,59},{60,60},{60,162},{60,176},{60,187},{60,190},{60,197},{61,61},{61,69},{61,74},{61,93},{61,101},{61,111},{61,128},{61,163},{61,193},{61,196},{62,6},{62,7},{62,35},{62,62},{62,96},{62,103},{62,113},{62,129},{62,164},{62,200},{63,16},{63,27},{63,44},{63,63},{63,88},{63,121},{63,134},{63,165},{63,175},{63,188},{64,4},{64,26},{64,64},{64,79},{64,84},{64,119},{64,134},{64,136},{64,166},{64,168},{65,12},{65,13},{65,52},{65,57},{65,65},{65,106},{65,138},{65,142},{65,167},{65,176},{66,24},{66,30},{66,52},{66,66},{66,102},{66,112},{66,117},{66,122},{66,135},{66,168},{67,6},{67,57},{67,67},{67,85},{67,97},{67,140},{67,169},{67,182},{67,184},{67,186},{68,6},{68,58},{68,68},{68,71},{68,90},{68,134},{68,143},{68,145},{68,152},{68,170},{69,54},{69,57},{69,59},{69,69},{69,77},{69,103},{69,104},{69,114},{69,136},{69,171},{70,19},{70,24},{70,56},{70,70},{70,100},{70,105},{70,114},{70,128},{70,129},{70,172},{71,14},{71,52},{71,63},{71,70},{71,71},{71,120},{71,169},{71,173},{71,178},{71,196},{72,11},{72,25},{72,39},{72,66},{72,72},{72,120},{72,130},{72,132},{72,174},{72,199},{73,48},{73,49},{73,64},{73,73},{73,98},{73,111},{73,175},{73,179},{73,201},{73,202},{74,9},{74,15},{74,58},{74,74},{74,84},{74,107},{74,120},{74,135},{74,164},{74,176},{75,28},{75,41},{75,70},{75,75},{75,96},{75,133},{75,155},{75,166},{75,177},{75,202},{76,26},{76,45},{76,65},{76,76},{76,94},{76,144},{76,158},{76,172},{76,178},{76,203},{77,10},{77,13},{77,77},{77,84},{77,87},{77,127},{77,151},{77,163},{77,179},{77,191},{78,49},{78,55},{78,65},{78,78},{78,90},{78,122},{78,130},{78,139},{78,180},{78,182},{79,33},{79,43},{79,67},{79,79},{79,99},{79,123},{79,141},{79,181},{79,188},{79,202},{80,18},{80,19},{80,35},{80,46},{80,80},{80,153},{80,167},{80,182},{80,188},{80,193},{81,9},{81,16},{81,36},{81,55},{81,81},{81,143},{81,160},{81,183},{81,186},{81,191},{82,10},{82,11},{82,79},{82,82},{82,96},{82,108},{82,111},{82,126},{82,172},{82,184},{83,12},{83,36},{83,69},{83,83},{83,87},{83,148},{83,174},{83,185},{83,202},{83,204},{84,45},{84,47},{84,48},{84,75},{84,84},{84,108},{84,123},{84,142},{84,153},{84,186},{85,9},{85,46},{85,53},{85,54},{85,85},{85,115},{85,121},{85,129},{85,177},{85,187},{86,22},{86,64},{86,83},{86,86},{86,91},{86,107},{86,116},{86,171},{86,188},{86,199},{87,8},{87,22},{87,61},{87,81},{87,87},{87,104},{87,120},{87,182},{87,189},{87,198},{88,32},{88,33},{88,39},{88,51},{88,88},{88,129},{88,143},{88,171},{88,180},{88,190},{89,3},{89,21},{89,52},{89,89},{89,100},{89,103},{89,109},{89,115},{89,125},{89,191},{90,20},{90,40},{90,44},{90,61},{90,90},{90,118},{90,137},{90,153},{90,184},{90,192},{91,6},{91,23},{91,29},{91,84},{91,91},{91,144},{91,155},{91,173},{91,185},{91,193},{92,14},{92,49},{92,72},{92,92},{92,102},{92,147},{92,171},{92,185},{92,186},{92,194},{93,5},{93,21},{93,29},{93,65},{93,93},{93,105},{93,110},{93,119},{93,184},{93,195},{94,39},{94,80},{94,82},{94,94},{94,98},{94,107},{94,113},{94,131},{94,166},{94,196},{95,30},{95,47},{95,50},{95,63},{95,95},{95,104},{95,118},{95,161},{95,163},{95,197},{96,25},{96,34},{96,56},{96,68},{96,96},{96,116},{96,181},{96,186},{96,196},{96,198},{97,36},{97,38},{97,46},{97,89},{97,97},{97,113},{97,136},{97,150},{97,157},{97,199},{98,3},{98,12},{98,18},{98,30},{98,98},{98,136},{98,170},{98,187},{98,198},{98,200},{99,53},{99,62},{99,74},{99,97},{99,99},{99,104},{99,119},{99,156},{99,185},{99,201},{100,16},{100,68},{100,82},{100,95},{100,100},{100,106}};

                        for(looping=0;looping<decoderIterations;looping++)
						{
							
                            SPADecoder(rows_p, LLR, h, LLR_ret, L_ch, L_dec, y, z, col  );
							printf("%d\t", y[looping]);
						}									
							
return 0;
	
} 


Error messages
prog.c:5:13: error: expected ';', ',' or ')' before numeric constant
 #define col 204
             ^
prog.c:9:19: note: in expansion of macro 'col'
 int codecheck(int col,int col_p,int rows_p,int **h,int x[])
                   ^
prog.c:5:13: error: expected ';', ',' or ')' before numeric constant
 #define col 204
             ^
prog.c:48:26: note: in expansion of macro 'col'
 int codesum (int y[],int col)
                          ^
prog.c:7:16: error: expected ';', ',' or ')' before numeric constant
 #define rows_p 1020
                ^
prog.c:60:21: note: in expansion of macro 'rows_p'
 void SPADecoder(int rows_p, double LLR[], int *h, double LLR_ret[], double L_ch[],  double L_dec[], int y[], int z, int col)
                     ^
prog.c: In function 'main':
prog.c:7:16: error: expected identifier or '(' before numeric constant
 #define rows_p 1020
                ^
prog.c:152:6: note: in expansion of macro 'rows_p'
  int rows_p,col_p;
      ^
prog.c:5:13: error: expected identifier or '(' before numeric constant
 #define col 204
             ^
prog.c:153:6: note: in expansion of macro 'col'
  int col,maxTransmissions=4000,decoderIterations=20,maxErrors=100,errorsAccumulated=0;   // iterations gives the maximum number of time the decoder is run for each value of SNR
      ^
prog.c:158:23: error: expected expression before '/' token
  double temp;         /
                       ^
prog.c:178:47: error: 'decoderIterations' undeclared (first use in this function)
                         for(looping=0;looping<decoderIterations;looping++)
                                               ^
prog.c:178:47: note: each undeclared identifier is reported only once for each function it appears in
prog.c:181:29: warning: implicit declaration of function 'SPADecoder' [-Wimplicit-function-declaration]
                             SPADecoder(rows_p, LLR, h, LLR_ret, L_ch, L_dec, y, z, col  );
                             ^
prog.c:181:78: error: 'y' undeclared (first use in this function)
                             SPADecoder(rows_p, LLR, h, LLR_ret, L_ch, L_dec, y, z, col  );
                                                                              ^


Was This Post Helpful? 0
  • +
  • -

#13 andrewsw  Icon User is offline

  • say what now
  • member icon

Reputation: 6409
  • View blog
  • Posts: 25,892
  • Joined: 12-December 12

Re: Passing an array by reference in C?

Posted 31 August 2017 - 12:03 AM

Do not open duplicate topics. Topics merged.
Was This Post Helpful? 0
  • +
  • -

#14 thaus_15  Icon User is offline

  • D.I.C Head

Reputation: -1
  • View blog
  • Posts: 53
  • Joined: 09-May 17

Re: Passing an array by reference in C?

Posted 31 August 2017 - 04:03 AM

I fixed some compilation errors but eventhough i am warning messages.

#include <stdio.h>
#include <math.h>
 
#define COL 204
#define COL_P 2
#define ROWS_P 1020
 
int codecheck(int col,int col_p,int rows_p,int **h,int x[])
{	int i,j,m,f; //flags
	int sum = 0;
	int y[col];
	
	for (i=0;i<col;i++)
	y[i]=0;
	m=1;
	f=-1;
	for(i=0;i<rows_p;)							 
	{			
		for(j=0;j<rows_p;j++)
		{
			if(h[j][0]==m)
			{		
				y[m]=y[m] + x[h[j][1]-1];
					f++;
			}
		}
		y[m]=y[m]%2;
		m=m+1;
		i=f+1;
	}
 
	for (i = 0; i < col; ++i) 
		{
			sum =sum+ y[i];
		}
	if (sum == 0) 
		{
			return 1;
		}
	else
		{	
			return -1;
		}
				
}
 
int codesum (int y[],int col)
{
    int sum=0;
    for(int i=0;i<col;i++)
        sum+=y[i];
    //cout<< "sum="<< sum<<endl;
    if(sum>0)
        return 0;
    else
        return 1;
}
 
void SPADecoder(int rows_p, double LLR[], int (*)[2] h, double LLR_ret[], double L_ch[],  double L_dec[], int y[], int z, int col)
{
    double temp;
	int col_p;
    int i,j,k;
    for(i=0;i<rows_p;i++)
    {
        temp=1;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][0]==h[i][0])
            {
                temp=temp * tanhf(LLR[j]/2);
            }
        }
								
								
        LLR_ret[i] = log((1 + temp)/(1 - temp));     // lower and upper bounding the LLR
								
        if(LLR_ret[i] > 40)
        {
            LLR_ret[i]=40;
        }
        else if(LLR_ret[i]<-40)
        {
            LLR_ret[i]=-40;
        }
        
    }
    
    for(i=0;i<col;i++)							// L_dec array used to decide the value of each bit of codeword here it is initalized to LLr value received from channel
    {
        L_dec[i]=L_ch[i];
    }
    
    
    for(i=1;i<col+1;i++)						// LLR values received by the variable nodes are added and stored in L_dec for decision making
    {
        for(j=0;j<rows_p;j++)
        {
            if(h[j][1]==i)
            {
                L_dec[i-1]=L_dec[i-1]+LLR_ret[j];
            }
            
        }
        
        if(L_dec[i-1]<=0)						// decision about the bit values of the received codeword is done her and stored in Y.
        {
            y[i-1]=1;
        }
        else
        {
            y[i-1]=0;
        }
        
    }
    
    
    //z = codesum(y,col);
    z=codecheck(col, col_p,rows_p,h,y); // checking whether the decoded codeword is all zero or not
    
    if(z==1)								// if decoded perfectly exit the deoding loop
    {
        return ;
    }
    // updating LLR values on variable nodes side for each variable and check node
    for(i=0;i<rows_p;i++)
    {
        temp=0;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][1]==h[i][1])
            {
                temp=temp + LLR_ret[j];
                k=h[i][1];
                
            }
        }
        LLR[i] = temp+L_ch[k-1];
    }
 
}
 
int main()
{
    
    
	// flags and counters
	int z,i,j,N,k,ber_count,looping,t,sum;
    float d=1;
	float rate=0.5;
	int rows_p,col_p;
	int col;			// iterations gives the maximum number of time the decoder is run for each value of SNR
 
	double var,snr;
	double temp; 								
	
    float y[COL],x[COL],noise[COL];  // "x" will be used as a codeword and "y" is received codeword.
    double L_ch[COL],L_dec[COL];    //holds LLR values given by the channel
	double LLR[ROWS_P],LLR_ret[ROWS_P];					//hold updated LLR values at variable node and check node respectively
 
   int  ret,row=0;
 
    
int h[ROWS_P][COL_P]={{1,1},{1,18},{1,27},{1,82},{1,102},{1,103},{1,130},{1,177},{1,190},{1,203},{2,2},{2,15},{2,75},{2,80},{2,86},{2,104},{2,121},{2,141},{2,144},{2,191},{3,3},{3,31},{3,32},{3,42},{3,101},{3,105},{3,153},{3,159},{3,178},{3,199},{4,4},{4,37},{4,71},{4,75},{4,85},{4,106},{4,111},{4,114},{4,127},{4,164},{5,5},{5,17},{5,42},{5,72},{5,87},{5,107},{5,141},{5,158},{5,193},{5,197},{6,4},{6,6},{6,17},{6,78},{6,102},{6,108},{6,162},{6,165},{6,167},{6,174},{7,7},{7,23},{7,73},{7,80},{7,83},{7,109},{7,118},{7,168},{7,177},{7,178},{8,8},{8,33},{8,37},{8,73},{8,100},{8,110},{8,156},{8,173},{8,192},{8,197},{9,9},{9,40},{9,41},{9,88},{9,92},{9,103},{9,111},{9,173},{9,181},{9,199},{10,10},{10,14},{10,23},{10,53},{10,93},{10,107},{10,112},{10,137},{10,167},{10,175},{11,11},{11,19},{11,26},{11,28},{11,88},{11,110},{11,113},{11,116},{11,170},{11,191},{12,1},{12,12},{12,25},{12,86},{12,97},{12,108},{12,114},{12,124},{12,161},{12,192},{13,4},{13,13},{13,33},{13,34},{13,50},{13,115},{13,137},{13,140},{13,146},{13,160},{14,14},{14,31},{14,40},{14,58},{14,95},{14,116},{14,121},{14,166},{14,174},{14,203},{15,15},{15,68},{15,70},{15,87},{15,101},{15,109},{15,113},{15,117},{15,165},{15,180},{16,4},{16,16},{16,59},{16,67},{16,92},{16,118},{16,125},{16,131},{16,138},{16,151},{17,15},{17,17},{17,44},{17,71},{17,73},{17,119},{17,161},{17,190},{17,194},{17,198},{18,18},{18,47},{18,62},{18,85},{18,93},{18,120},{18,122},{18,125},{18,146},{18,181},{19,19},{19,22},{19,23},{19,37},{19,57},{19,121},{19,126},{19,130},{19,131},{19,143},{20,1},{20,20},{20,50},{20,51},{20,99},{20,106},{20,122},{20,169},{20,179},{20,200},{21,21},{21,32},{21,62},{21,72},{21,98},{21,123},{21,126},{21,154},{21,168},{21,204},{22,22},{22,31},{22,44},{22,89},{22,98},{22,124},{22,141},{22,160},{22,169},{22,176},{23,23},{23,32},{23,61},{23,65},{23,99},{23,125},{23,132},{23,133},{23,147},{23,152},{24,16},{24,24},{24,42},{24,73},{24,77},{24,126},{24,142},{24,145},{24,146},{24,147},{25,5},{25,24},{25,25},{25,55},{25,67},{25,127},{25,133},{25,165},{25,178},{25,185},{26,10},{26,26},{26,27},{26,40},{26,85},{26,128},{26,147},{26,155},{26,160},{26,200},{27,22},{27,27},{27,42},{27,50},{27,74},{27,108},{27,129},{27,154},{27,170},{27,195},{28,2},{28,28},{28,63},{28,67},{28,94},{28,130},{28,150},{28,171},{28,187},{28,192},{29,29},{29,48},{29,69},{29,79},{29,90},{29,116},{29,131},{29,159},{29,176},{29,200},{30,7},{30,30},{30,53},{30,58},{30,94},{30,127},{30,132},{30,140},{30,162},{30,189},{31,29},{31,31},{31,64},{31,77},{31,94},{31,117},{31,133},{31,167},{31,183},{31,190},{32,20},{32,30},{32,32},{32,74},{32,78},{32,115},{32,134},{32,151},{32,181},{32,194},{33,11},{33,33},{33,47},{33,76},{33,81},{33,109},{33,135},{33,154},{33,155},{33,179},{34,2},{34,7},{34,34},{34,71},{34,76},{34,136},{34,138},{34,159},{34,182},{34,183},{35,27},{35,29},{35,35},{35,60},{35,86},{35,123},{35,137},{35,149},{35,166},{35,189},{36,17},{36,35},{36,36},{36,48},{36,100},{36,138},{36,139},{36,146},{36,163},{36,168},{37,5},{37,34},{37,37},{37,38},{37,69},{37,117},{37,139},{37,145},{37,169},{37,203},{38,38},{38,56},{38,76},{38,92},{38,101},{38,106},{38,123},{38,140},{38,161},{38,170},{39,39},{39,41},{39,60},{39,76},{39,78},{39,125},{39,141},{39,142},{39,175},{39,198},{40,2},{40,35},{40,40},{40,43},{40,93},{40,114},{40,135},{40,142},{40,148},{40,158},{41,1},{41,2},{41,13},{41,41},{41,59},{41,109},{41,119},{41,132},{41,143},{41,157},{42,11},{42,42},{42,43},{42,92},{42,95},{42,115},{42,117},{42,144},{42,156},{42,204},{43,7},{43,9},{43,43},{43,45},{43,56},{43,122},{43,145},{43,192},{43,194},{43,201},{44,10},{44,44},{44,75},{44,83},{44,95},{44,110},{44,135},{44,146},{44,157},{44,180},{45,45},{45,63},{45,79},{45,81},{45,97},{45,127},{45,139},{45,147},{45,148},{45,195},{46,34},{46,46},{46,61},{46,66},{46,77},{46,105},{46,144},{46,148},{46,197},{46,201},{47,14},{47,20},{47,46},{47,47},{47,83},{47,124},{47,128},{47,132},{47,149},{47,159},{48,8},{48,13},{48,26},{48,48},{48,62},{48,149},{48,150},{48,174},{48,193},{48,195},{49,15},{49,21},{49,25},{49,49},{49,51},{49,145},{49,149},{49,151},{49,177},{49,188},{50,8},{50,49},{50,50},{50,54},{50,89},{50,105},{50,126},{50,152},{50,164},{50,165},{51,43},{51,51},{51,66},{51,68},{51,91},{51,131},{51,133},{51,153},{51,187},{51,189},{52,1},{52,39},{52,45},{52,52},{52,54},{52,110},{52,140},{52,150},{52,154},{52,163},{53,8},{53,53},{53,60},{53,64},{53,90},{53,138},{53,155},{53,157},{53,194},{53,204},{54,12},{54,28},{54,54},{54,60},{54,82},{54,112},{54,139},{54,151},{54,156},{54,183},{55,3},{55,17},{55,37},{55,55},{55,99},{55,112},{55,148},{55,157},{55,172},{55,189},{56,20},{56,31},{56,56},{56,80},{56,91},{56,152},{56,156},{56,158},{56,162},{56,180},{57,28},{57,57},{57,66},{57,81},{57,89},{57,134},{57,137},{57,159},{57,172},{57,196},{58,5},{58,58},{58,70},{58,78},{58,91},{58,118},{58,149},{58,154},{58,160},{58,201},{59,18},{59,24},{59,59},{59,88},{59,96},{59,150},{59,152},{59,161},{59,179},{59,183},{60,21},{60,38},{60,55},{60,59},{60,60},{60,162},{60,176},{60,187},{60,190},{60,197},{61,61},{61,69},{61,74},{61,93},{61,101},{61,111},{61,128},{61,163},{61,193},{61,196},{62,6},{62,7},{62,35},{62,62},{62,96},{62,103},{62,113},{62,129},{62,164},{62,200},{63,16},{63,27},{63,44},{63,63},{63,88},{63,121},{63,134},{63,165},{63,175},{63,188},{64,4},{64,26},{64,64},{64,79},{64,84},{64,119},{64,134},{64,136},{64,166},{64,168},{65,12},{65,13},{65,52},{65,57},{65,65},{65,106},{65,138},{65,142},{65,167},{65,176},{66,24},{66,30},{66,52},{66,66},{66,102},{66,112},{66,117},{66,122},{66,135},{66,168},{67,6},{67,57},{67,67},{67,85},{67,97},{67,140},{67,169},{67,182},{67,184},{67,186},{68,6},{68,58},{68,68},{68,71},{68,90},{68,134},{68,143},{68,145},{68,152},{68,170},{69,54},{69,57},{69,59},{69,69},{69,77},{69,103},{69,104},{69,114},{69,136},{69,171},{70,19},{70,24},{70,56},{70,70},{70,100},{70,105},{70,114},{70,128},{70,129},{70,172},{71,14},{71,52},{71,63},{71,70},{71,71},{71,120},{71,169},{71,173},{71,178},{71,196},{72,11},{72,25},{72,39},{72,66},{72,72},{72,120},{72,130},{72,132},{72,174},{72,199},{73,48},{73,49},{73,64},{73,73},{73,98},{73,111},{73,175},{73,179},{73,201},{73,202},{74,9},{74,15},{74,58},{74,74},{74,84},{74,107},{74,120},{74,135},{74,164},{74,176},{75,28},{75,41},{75,70},{75,75},{75,96},{75,133},{75,155},{75,166},{75,177},{75,202},{76,26},{76,45},{76,65},{76,76},{76,94},{76,144},{76,158},{76,172},{76,178},{76,203},{77,10},{77,13},{77,77},{77,84},{77,87},{77,127},{77,151},{77,163},{77,179},{77,191},{78,49},{78,55},{78,65},{78,78},{78,90},{78,122},{78,130},{78,139},{78,180},{78,182},{79,33},{79,43},{79,67},{79,79},{79,99},{79,123},{79,141},{79,181},{79,188},{79,202},{80,18},{80,19},{80,35},{80,46},{80,80},{80,153},{80,167},{80,182},{80,188},{80,193},{81,9},{81,16},{81,36},{81,55},{81,81},{81,143},{81,160},{81,183},{81,186},{81,191},{82,10},{82,11},{82,79},{82,82},{82,96},{82,108},{82,111},{82,126},{82,172},{82,184},{83,12},{83,36},{83,69},{83,83},{83,87},{83,148},{83,174},{83,185},{83,202},{83,204},{84,45},{84,47},{84,48},{84,75},{84,84},{84,108},{84,123},{84,142},{84,153},{84,186},{85,9},{85,46},{85,53},{85,54},{85,85},{85,115},{85,121},{85,129},{85,177},{85,187},{86,22},{86,64},{86,83},{86,86},{86,91},{86,107},{86,116},{86,171},{86,188},{86,199},{87,8},{87,22},{87,61},{87,81},{87,87},{87,104},{87,120},{87,182},{87,189},{87,198},{88,32},{88,33},{88,39},{88,51},{88,88},{88,129},{88,143},{88,171},{88,180},{88,190},{89,3},{89,21},{89,52},{89,89},{89,100},{89,103},{89,109},{89,115},{89,125},{89,191},{90,20},{90,40},{90,44},{90,61},{90,90},{90,118},{90,137},{90,153},{90,184},{90,192},{91,6},{91,23},{91,29},{91,84},{91,91},{91,144},{91,155},{91,173},{91,185},{91,193},{92,14},{92,49},{92,72},{92,92},{92,102},{92,147},{92,171},{92,185},{92,186},{92,194},{93,5},{93,21},{93,29},{93,65},{93,93},{93,105},{93,110},{93,119},{93,184},{93,195},{94,39},{94,80},{94,82},{94,94},{94,98},{94,107},{94,113},{94,131},{94,166},{94,196},{95,30},{95,47},{95,50},{95,63},{95,95},{95,104},{95,118},{95,161},{95,163},{95,197},{96,25},{96,34},{96,56},{96,68},{96,96},{96,116},{96,181},{96,186},{96,196},{96,198},{97,36},{97,38},{97,46},{97,89},{97,97},{97,113},{97,136},{97,150},{97,157},{97,199},{98,3},{98,12},{98,18},{98,30},{98,98},{98,136},{98,170},{98,187},{98,198},{98,200},{99,53},{99,62},{99,74},{99,97},{99,99},{99,104},{99,119},{99,156},{99,185},{99,201},{100,16},{100,68},{100,82},{100,95},{100,100},{100,106}};
 
                        for(looping=0;looping<20;looping++)
						{
							
                            SPADecoder(rows_p, LLR, h, LLR_ret, L_ch, L_dec, y, z, col  );
							printf("%d\t", y[looping]);
						}
return 0;
	
}


Warning messages
prog.c:59:54: error: expected ';', ',' or ')' before 'h'
void SPADecoder(int rows_p, double LLR[], int (*)[2] h, double LLR_ret[], double L_ch[], double L_dec[], int y[], int z, int col)
^
prog.c: In function 'main':
prog.c:169:29: warning: implicit declaration of function 'SPADecoder' [-Wimplicit-function-declaration]
SPADecoder(rows_p, LLR, h, LLR_ret, L_ch, L_dec, y, z, col );
^
prog.c:170:15: warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]
printf("%d\t", y[looping]);
^


This post has been edited by thaus_15: 31 August 2017 - 04:09 AM

Was This Post Helpful? 0
  • +
  • -

#15 jimblumberg  Icon User is online

  • member icon

Reputation: 5344
  • View blog
  • Posts: 16,678
  • Joined: 25-December 09

Re: Passing an array by reference in C?

Posted 31 August 2017 - 04:59 AM

While just changing the #define statements to upper case will quiet the compiler it will not solve many of the underlying problems with the program. To solve the actual problems you will need to stop passing the variables into the functions and use the #defined constants instead. For example:
int codesum (int y[])
{
    int sum = 0;
    for(int i = 0; i < COL; i++)
        sum += y[i];

    if(sum > 0)
        return 0;
    else
        return 1;
}



Note the difference in the function definition and the use of COL in the loop.

The last warning is being caused because the variable type doesn't match the format specifier. What type of variable is y?

Jim
Was This Post Helpful? 0
  • +
  • -

  • (4 Pages)
  • +
  • 1
  • 2
  • 3
  • Last »