是char*,int*,long*甚至是long long*同样大小的(在给定的平台)?
当在c中调用变量参数函数时,整数参数被提升为int,浮点参数被提升为double
由于原型未指定可选参数的类型,因此在调用可变参数函数时,将对可选参数值执行默认参数提升.这意味着类型
char或short int(无论是否签名)的对象被提升为任何一个int或unsigned int适当的; 并且类型的对象float被提升为类型double.因此,如果调用者将achar作为可选参数传递,则将其提升为aint,并且该函数可以使用它来访问它va_arg (ap, int).
int类型应该是32位机器上的4字节和64位机器上的8字节,是吗?
所以我想知道当我将一个long long int带有%lld格式的printf 传递给变量参数函数时会追加什么.
而且,我再次想知道当我将一个long double变量传递给带有%Lf格式的printf时(无论是在32位还是64位机器上).
[已编辑 ]
在32位机器上,我试过这个:
#include <stdio.h>
int main(void)
{
printf("sizeof(int) %d\n", sizeof(int));
printf("sizeof(long int) %d\n", sizeof(long int));
printf("sizeof(long long int) %d\n", sizeof(long long int));
printf("%lld\n", 1LL<<33);
printf("sizeof(float) %d\n", sizeof(float));
printf("sizeof(double) %d\n", sizeof(double));
printf("sizeof(long double) %d\n", sizeof(long double)); …Run Code Online (Sandbox Code Playgroud) char x = 'G';
char *p = &x;
printf ("Address of x: %p\n", p);
printf ("Address of x: %p\n", (void*)p);
Run Code Online (Sandbox Code Playgroud)
谁能告诉我究竟(void*)p意味着什么?我知道它是一样的p,因为它也给了我地址x,但为什么写的是(void*)p?