发布网友 发布时间:2023-08-08 06:34
共5个回答
热心网友 时间:2023-09-20 05:39
修改成:p=(void *)((unsigned int)a + (unsigned int)b);
错误原因:
首先一点,两个地址相加没有意义,地址加一个偏移量才有意义,你一行实质是两个地址相加;
如果你想练习使用指针访问变量的值,从而得到1000+11的结果,那么就是int c = *a + *b; 最后结果是一个数字,不是地址,所以不要赋给p;
如果你想要p指向最后得到的结果,那么再增加一行p=(void*)&c。
相关警告及解决办法:
显示:warning: implicit declaration of function 'Example()'。
警告原因:在你的.c文件中调用了函数Example(),可是你并没有把声明这个函数的相应的.h文件包含进来,有可能你在一个.c文件中定义了这个函数体,但并没有在.h中进行声明。
解决方法:你可以在调用这种函数的.c文件的一开始处加上:extern Example()或者可以在调用这种函数的.c文件中包含进声明了函数Example()的头文件,如果你在一个.c文件中定义了这个函数体,但并没有在.h中进行声明,不嫌麻烦的话,你也可以去生成一个.h文件,加上你的函数声明。
显示:warning: unused variable 'param'。
警告原因:很明显,是您定义了变量‘param',却根本没有使用它。
解决方法:不需要用的话,就删了它吧。
显示:warning: statement with no effect。
警告原因:可能的情况是,在你的文件中,你这么干#define MACROPRINT然后在某一处又定义了#define MACROPRINT printf。然后你在各处引用MACROPRINT(“HELLO”),这样不会出错,但是发生了警告“这个声明是没有用的”。
解决方法:把#define MACROPRINT删掉。
显示:warning: int format, long int arg (arg 3)。
警告原因: 象这样printf("%s%d, szDebugString, ulGwId);你的ulGwId是一个unsigned long型的,而你为它选择的输出形式却是 “%d”(这个格式是为整数型服务的-int)。
解决方法: 这样的错误你只要做到参数类型一致就可以了,象上面的现象,你只要把“%d”改成“%d”就可以了。
热心网友 时间:2023-09-20 05:39
char *是四字节,而long long是8字节,在把char *强转成整型的时候,默认专为4字节,与long long的8字节不匹配,所以告警。追答可能是你的编译器不允许这么干。
改成p=(void *)((unsigned int)a + (unsigned int)b);应该就可以了吧。只是两个地址相加,其和可能超过4字节整型的表达范围,产生溢出。所以一般不会用两个指针相加,而是用一个指针再加一个偏移量。
热心网友 时间:2023-09-20 05:40
这一行问题很多,看起来兄弟是刚刚学习这门语言的热心网友 时间:2023-09-20 05:40
p=(void *)((long long)a+(char *)b); // a 和 b 都是指针,按说是不能加的,先想好要做什么.热心网友 时间:2023-09-20 05:41
改成