8内存对齐&补齐(了解)
变量的地址是变量本身所占字节数的倍数。分配空间到内存地址的边界上。对齐可以提高访问速度。char 1 地址是1的倍数
int 4 地址是4的倍数
typedef struct Goods
{
char name[18]; //18
double price //8
char special //1
int num; //4
short saled; //2
}
对齐导致结构变量内部内存空间空缺
补齐:两个同类型的变量大小必须一样,所以补成结构体中最大元素的倍数, 最大是4的倍数。
VC编译器是按结构体中最大元素中每个元素的所占内存字节数的倍数来计算的,最大不是4,可以是8
9 函数
9.1 函数形参
-
func()
func(void)
C
参数不固定
不需要参数
C++
不要参数
9.1.1数组作为函数参数
设计两个形参:1数组地址 2元素个数
形如:void add(int a[],int n)
#include<stdio.h>
int main(int argc,char* argv[])//shell给main函数传参。argc表示命令个数
//argv存放每个命令字符串的地址
{
if(argc == 1)
{
printf("Please input with commad:%s,...\n",argv[0]);
return 1;
}
else
{
printf("共%d个参数:",argc);
int i ;
for(i = 0;i < argc;i++)
{
printf("%s, ",argv[i]);
}
}
printf("\n");
return 0;
}
9.1.2可变参数表
#include<stdio.h>
#include<stdarg.h>
int max(int ,...);
int main()
{
int n = max(5,11,15,8,6,3);
printf("最大值为:%d\n",n);
}
int max(int cnt,...)
{
va_list v;
va_start(v,cnt);
int temp,max= va_arg(v,int) ;
for(int n = 0;n < cnt; n++)
{
temp = va_arg(v,int);
max = max<temp?temp:max;
}
va_end(v); //释放可变参数表
return max;
}