a + b problem

午后红茶馆 2015-03-31 07:06:22

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int add(int a, int b){
char *c;
c = (char *)a;
return (int)&c[b];
}

int main()
{
int a = -80000, b = 2147483615;
printf("%d\n", add(a, b));
return 0;
}


真诚希望路人可以给出此函数的详细原理!



...全文
135 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
午后红茶馆 2015-04-02
  • 打赏
  • 举报
回复
谢谢楼上几位,现在明白了,只是想加深下对指针的理解。。。
勉励前行 2015-04-01
  • 打赏
  • 举报
回复
C语言中 c[b] 是等效于 *(c+b) char *c = (char *)a; //注意这不是 &a , 而是将a的值强制转换为一个指针,下面又转回来 int(c) == a (int) &c[b] == int (&*(c+b)) == int(c+b) == int(c) + b == a+b 除了那些没事找事干的考官或以捉弄人为乐的老师,没人干这等无聊的事吧。
CCED136 2015-04-01
  • 打赏
  • 举报
回复
这函数,绕一大圈结果仅仅是实现了 a+b 的功能, 关键的地方是指针及内存管理问题: 1、首先,要明白 char *c 这个指针, 可以使用 c[int index] 的形式访问元素, 2、其次,对 char *c 这个指针的加减, 是按照 sizeof(char) 来移动的。 要重点理解 *c = c[0] , *(c+0) = c[0], c+0 = &c[0], c+1 = &c[1] 这四个表达式。 如果能明白上面的表达式, 这个函数就容易理解了: 对于本函数, &c[b] 的意思,表达式的含义是“c数组第b个元素的地址”, 实际上是将char *c 指针,往后移动b个字节(其实就是 c+b)
午后红茶馆 2015-03-31
  • 打赏
  • 举报
回复
引用 1 楼 u014798180 的回复:
这是段C的程序,int add(int a, int b) 这个函数是首先定义了一个char类型指针c,然后将整型a强制转换类型为char *赋值给c。然后返回c指针后的第b位的地址,然后在主函数中调用这个函数 输出一个数。
我没有说清楚真是不好意思哈~我的意思是这个函数为什么可以计算a + b 的值。。。
123456jiihi 2015-03-31
  • 打赏
  • 举报
回复
这是段C的程序,int add(int a, int b) 这个函数是首先定义了一个char类型指针c,然后将整型a强制转换类型为char *赋值给c。然后返回c指针后的第b位的地址,然后在主函数中调用这个函数 输出一个数。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧