请问放大因子是怎么来的?我仅了解不同数据类型的放大因子等于一个该数据类型的变量所占用的内存单元数,那么它跟“步长”什么关系啊?有区别的么?
[此贴子已经被作者于2006-8-22 21:38:46编辑过]
论坛里下载的《C语言技术文章》里面有篇《C语言函数中利用指针引用可变参数的方法
》
里的一道变参函数里看到:
inputpict(char *format,…)
{
char ff,str[256];
void *p; /*此无类型指针可指向任意类型的变量p */
p=*(&format+1);/*这一语句的无类型指针p取的是format的地址加1的内容,这与前面的说明堆栈内指针地址应加2(小系统编译模式)不一致,原因是该指针在编译是乘上了放大因子2。经多个版本的c编译程序编译都证明在此处加1的结果才是正确的。*/
getspict(*format); /*按各式输入字符串*/
ff-toupper(*format); /*取须返回变量类型*/
switch(ff)
{
case 'I':{
int *a;
a=p;
*a=atoi(str);
break; /*返回整型变量处理*/
}
case 'L':{
long *a;
a=p;
*a=atol(str);
break; /*返回长整型变量处理*/
}
case 'F':{
float *a;
a=p;
*a=(float)atof(str);
break; /*返回浮点数处理*/
}
case 'D':{
double *a;
a=p;
*a=atof(str);
break; /*返回双精度浮点数处理*/
}
case 'C':{
char *a;
a=p;
strcpy(a,str);
break; /*返回字符串处理*/
}
default:
error("Error!"); /*用户自定义出错时的信息*/
}
return;
}
[此贴子已经被作者于2006-8-23 9:40:45编辑过]
指针和整数可进行加、减运算。设p是指向某一数组元素的指针, 开始时指向数组的第0号元素, 设n为一整数, 则 p+n 就表示指向数组的第n号元素(下标为n的元素)。 不论指针变量指向何种数据类型, 指针和整数进行加、减运算时, 编译程序总根据所指对象的数据长度对n放大, 在一般微机上, char放大因子为1, int、 short放大因子为2, long和float放大因子为4, double放大因子为8。
这不就是指针移动一步的字节数么?我应该没错吧,有点不肯定,怎么有个“步长”的说法后又有个“放大因子”?
[此贴子已经被作者于2006-8-23 11:28:07编辑过]
http://www.bc-cn.net/Soft/kfyy/c/200603/283.html 第 12篇 C语言函数中利用指针引用可变参数的方法
顺道问下您知道 WINDOWS里的Application Data(隐藏的)转移到D盘,用什么批处理命令啊,好像还得修改注册表,我在“操作系统”里挂好久没人回答我
[此贴子已经被作者于2006-8-23 11:24:38编辑过]