Linux下,参数类型转换和传递问题

问题:
假如函数A(char* pcTemp),
函数内部int y= * (int * )pcTemp;
外部使用,int x=1;A(x);
1、那么y是多少,是1还是一个不可预知的奇数?
2、不同的交叉编译链结果会有区别吗?
3、不同位数的系统,结果会不同吗?
4、假如把函数入参改成void * pcTemp,结果会不一样吗?

你这样写根本不能编译,虽然我可以修改成可以编译的代码,但是需要加上各种强制转换,那么结果取决于我怎么修改,而我不知道你的意图。

#include <stdio.h>
void A(char* pcTemp)
{
    int y=(int)pcTemp;
    printf("%d", y);
}
int main()
{
    int x=1;
    A(x);   
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7670880
  • 除此之外, 这篇博客: C++模板为什么不支持分离编译,带你讲清楚其底层原理中的 在a.cpp文件中进行类型声明。🐬 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    //a.cpp文件
    #include"a.h"
    
    void func(int a,int b)
    {
    	cout << "a = " << a << endl;
    	cout << "b = " << b << endl;
    }
    
    template<class T>
    T Add(const T& left, const T& right)
    {
    	return left + right;
    }
    
    //显示告诉编译器应该实例化成什么类型,这样.cpp的文件就可以实例化,也可以找到地址了
    template
    int Add<int>(const int& left, const int& right);
    template
    double Add<double>(const double& left, const double& right);
    

    ​ 直接显示地告诉编译器,要实例化成什么类型,但是这样就会显得很麻烦。



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^