相关疑难解决方法(0)

46
推荐指数
6
解决办法
9050
查看次数

更好地理解c中可变参数的类型推广

当在c中调用变量参数函数时,整数参数被提升为int,浮点参数被提升为double

由于原型未指定可选参数的类型,因此在调用可变参数函数时,将对可选参数值执行默认参数提升.这意味着类型charshort int(无论是否签名)的对象被提升为任何一个intunsigned int适当的; 并且类型的对象float被提升为类型double.因此,如果调用者将a char作为可选参数传递,则将其提升为a int,并且该函数可以使用它来访问它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)

c floating-point int printf c99

9
推荐指数
1
解决办法
557
查看次数

为什么在printf中使用指针时会将其转换为(void*)p?

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

c

6
推荐指数
1
解决办法
131
查看次数

标签 统计

c ×3

c99 ×1

floating-point ×1

int ×1

pointers ×1

printf ×1

types ×1