double *cholesky(double *A, int n) {
    double *L = (double*)calloc(n * n, sizeof(double));
    if (L == NULL)
        exit(EXIT_FAILURE);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < (i+1); j++) {
            double s = 0;
            for (int k = 0; k < j; k++)
                s += L[i * n + k] * L[j * n + k];
            L[i * n + j] = (i == j) ?
                sqrt(A[i * n + i] - s) :
                (1.0 / L[j * n + j] * (A[i * n + j] - s));
        }
        return L;
    }
Now my question with this code is a follows, I am trying to see the step by step but I am getting a bit confused.
when I write
for(condition)
    for(condition){
        For(k=0;k<j;k++)
            s += L[i * n + k] * L[j * n + k];
        L[i * n + j] = (i == j) ?
            sqrt(A[i * n + i] - s) :
            (1.0 / L[j * n + j] * (A[i * n + j] - s));
    }
This is what I see happening:
First i = 0 and j = 0; then I step further into the code and we get this: for(k) loop. Now my first question is this since j=0 in first instance this for loop does not get evaluated, since k is less than j. 
for (int k = 0; k < j; k++)
But what of the kode below this for loop does get evaluated. 
Since L is an array of zeros, then s+=l[0]*l[0] should equal 0, but I dont get how the loop did run at all. Next does everything else below the for(k) get evaluated? 
if so i==j is true so L[i * n + j] = sqrt(A[i * n + i] - s)(in this case equals 0).
now going back to the top my nest questions becomes since
for(condition i )
   for(condition j)
don't have brackets does for(i=1 ) get evaluated following that for(j) gets evaluated twice below before j=0 and j=i?
Really would appreciate all the help I could get.
Thank you,
 
     
    