栈的地址生长方式

int (const int src[16])
{
    int val1=0;
    int dst[16]={0};
    int val2=0;
    const int *psrc=src;
    
    fprintf(stdout,"size of src=%lun",sizeof(src));
    //问题2:如下代码有什么副作用?
    for(int i=0;i<=16;i++)//越dst[16]界
    {
        dst[i]=*psrc+i;
        psrc++;
    }
        return 0;
 }

常说:

  1. 栈和堆的区别中,有一点是,栈的地址从高地址到低地址生长;

因此在栈中:

val1------高地址
     bigger than
dst[]-----中地址
    且: &dst[1] < &dst[2] <... < &dst[15]    
     bigger than
val-------低地址

因此:当dst数组溢出的时候,将会是向高地址溢出,因此val1将会被覆盖。