I do not know whether my question is appropriate or not. If there is a code....
int a[2];
If I want to check &a[0]%8==1 and do the operation  a[0]= (a[0] & ~7), is this valid way of doing?
I do not know whether my question is appropriate or not. If there is a code....
int a[2];
If I want to check &a[0]%8==1 and do the operation  a[0]= (a[0] & ~7), is this valid way of doing?
 
    
     
    
    It is not you who gets to decide the address of an array, it's the compiler+linker to decide at compile+load-time. (And you cannot assign to arrays, only to elements of arrays.)
If you need suitably aligned memory, use the malloc() function from <stdlib.h>. The C language standard guarantees that the pointer returned by malloc is suitably aligned for any type. If the minimum requirements for any type is 8, this will be an 8-byte aligned pointer. So what you should do is:
  #include <stdlib.h>
  int main (void)
  {
      int *a;
      a = malloc (2 * sizeof(*a));
      if (a == NULL) { /* Handle out of memory. */ }
      /* ... */
  }
This is actually a bit of overkill, since an array-of-int declared with int a[2]; will very likely have an alignment supporting fastest operation. Why is it you think forcing 8-byte alignment would be advantageous?
