C可變引數的應用和記憶體對齊
可變引數提供了一個引數可供多種選擇
記憶體對齊可以最大限度保證速度,當然是在犧牲記憶體的前提下
1. szieof(char*) =4 sizeof(int)=4 實際上就是對齊了 _INTSIZEOF(n)
void abc(char *CanShu,...)
{
char * ch;
ch=CanShu;
va_list vt; //typedef char * va_list;
va_start((vt,CanShu); // #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
while(ch!=NULL)
{
printf("%s\n",ch);
str=va_arg(vt,char*); //#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
//#define va_end(ap) ( ap = (va_list)0 )
}
va_end(vt);
}
void main()
{ abc("abcde","defg","hjk","fefe","we",null);}
2.記憶體對齊的特點
1.當前欄位的整數倍為起始地址 2.結構體(A)內部包含結構體(B),則B在A的起始地址為B裡面最大欄位的倍數 3.補齊。