当前位置:  开发笔记 > 编程语言 > 正文

如何使用这些字符创建加法器函数?

如何解决《如何使用这些字符创建加法器函数?》经验,为你挑选了1个好方法。

我看到了一个"谜题",你必须在C中编写一个返回值的函数a+c,但是,你不能使用+运算符.

unsigned f(unsigned a, unsigned c) {
    return ;
}

您只能使用以下字符:harc()&|[]*/.



1> abligh..:

这应该在实践中起作用,但我相信它依赖于未定义的行为并会产生警告:

unsigned f(unsigned a, unsigned c) {
    return &(((char*)a)[c]);
}

(实践中需要更少的括号)

其工作原理如下:

   (char*)a      - cast 'a' to a 'char *' pointer 
  ((char*)a)[c]  - treat 'a' as an array, and index the c'th element, which
                   will be at address c + a
&(((char*)a)[c]) - take the address of that element, i.e. c + a

最后return再把它投回去了unsigned.

琐碎的测试工具,使用gcc 4.8编译并带有两个警告:

#include 

unsigned
f (unsigned a, unsigned c)
{
  return &(((char *) a)[c]);
}

int
main (int argc, char **argv)
{
  unsigned a = 1;
  unsigned b = 2;
  unsigned c = f (a, b);
  printf ("%d + %d = %d\n", a, b, c);
  return 0;
}

请注意,这是C,而不是C++,它可能无法使用C++编译器进行编译.


`错误:从'char*'到'unsigned int'的无效转换是我得到的
推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有