首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求好手解释。

2012-12-30 
求高手解释。。。本帖最后由 CSON11 于 2012-12-09 17:46:59 编辑#include cstdioint main(){const char* p

求高手解释。。。
本帖最后由 CSON11 于 2012-12-09 17:46:59 编辑


#include <cstdio>

int main()
{
    const char* p="a大";  //已知“大”的GB2312码:B4 F3;
    printf("%p\n%p\n%p",p[0],p[1],p[2]);  //可变长参数,char类型的变量的入栈转换原则是什么??
}

打印结果是:
00000061
FFFFFFB4
FFFFFFF3
printf()函数参数表是可变长参数。
请问:
一个字节的char变量入栈时如何转换为4个字节?
请解释以上代码的运行结果?



[解决办法]
应该是打印时格式化的问题,如果你用%c格式化printf就对了
[解决办法]
我把windows里面%p的代码运行流程给你贴出来:

            case _T('p'):
                /* write a pointer -- this is like an integer or long */
                /* except we force precision to pad with zeros and */
                /* output in big hex. */

                precision = 2 * sizeof(void *);     /* number of hex digits needed */
#if PTR_IS_INT64
                flags 
[解决办法]
= FL_I64;                    /* assume we're converting an int64 */
#elif !PTR_IS_INT
                flags 
[解决办法]
= FL_LONG;                   /* assume we're converting a long */
#endif  /* !PTR_IS_INT */
                /* DROP THROUGH to hex formatting */

            case _T('X'):
                /* unsigned upper hex output */
                hexadd = _T('A') - _T('9') - 1;     /* set hexadd for uppercase hex */
                goto COMMON_HEX;




            COMMON_HEX:
                radix = 16;
                if (flags & FL_ALTERNATE) {
                    /* alternate form means '0x' prefix */


                    prefix[0] = _T('0');
                    prefix[1] = (TCHAR)(_T('x') - _T('a') + _T('9') + 1 + hexadd);  /* 'x' or 'X' */
                    prefixlen = 2;
                }
                goto COMMON_INT;


            COMMON_INT: {

:::

               l = (unsigned int) get_int_arg(&argptr);    /* zero-extend*/



__inline int __cdecl get_int_arg (
    va_list *pargptr
    )
{
    return va_arg(*pargptr, int);
}
#define va_arg _crt_va_arg
#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
[解决办法]
&argptr即是你的a[x]
[解决办法]
这个有点难度,编译器的操作问题,可能会和你的认识出现些冲突的。针对你的第一个问题。

热点排行