Code Bye

求帮助:怎样才是传址啊?谢谢

讨教:
// iTween.cpp : 定义 DLL 应用程序的导出函数。
char dogOnlyId[30] = “314A990D1A6E4D0F”;
extern “C” DLL_API void ReadDogOnlyId(char *getDogOnlyId)
{
getDogOnlyId = dogOnlyId;
}
编译为 iTween.dll
// Test1.cpp : 定义 DLL 应用程序的导出函数。
char dogOnlyId[64] = “314A990D1A60F”;

extern “C” DLL_API int readNumber()
{
HINSTANCE   hDllInst   =  LoadLibrary(“iTween.dll”);
typedef   void   (WINAPI  *FunReadDogOnlyId)(char *);
FunReadDogOnlyId  MyReadDogOnlyId  =   NULL;
MyReadDogOnlyId  =  (FunReadDogOnlyId)GetProcAddress (hDllInst, “ReadDogOnlyId”);

MyReadDogOnlyId(dogOnlyId);

FreeLibrary(hDllInst);
}
编译为 Test1.dll
现在情况是,本人在别的程序调用 Test1.dll 的  readNumber()
当执行 MyReadDogOnlyId(dogOnlyId);
dogOnlyId 得不到正确的值
假如
extern “C” DLL_API void ReadDogOnlyId(char *getDogOnlyId)
{
getDogOnlyId = dogOnlyId;
}
变为
extern “C” DLL_API void ReadDogOnlyId(char *getDogOnlyId)
{
strncpy(getDogOnlyId, dogOnlyId, 30);
}
则可以得到正确的 值
莫非
getDogOnlyId = dogOnlyId;
不是传址吗?
怎么才能是传址?
谢谢!

解决方案

20

你要改变指针,则需要传指针的指针
extern “C” DLL_API void ReadDogOnlyId(char **getDogOnlyId)
{
*getDogOnlyId = dogOnlyId;
}

20

引用:

则需要传指针的指针
为什么是需要传递 指针的 指针 啊?
谢谢!

不是参数为指针就叫按地址传递,参数不为指针就按值传

40

这取决于你函数中要修改的内容,假如你函数中要修改的类型为T,那么你要传入T*才能修改之
否则你的T在函数中只是一个复制品,你修改不会影响到实参
所以要修改一个指针,要传入指针的指针

20

引用:

则需要传指针的指针
为什么是需要传递 指针的 指针 啊?
谢谢!

1、传指针:是为了修改指针指向的内容,修改不了指针本身(原因是指针本身是传值)
2、传指针的指针:是为了修改指针指向年内容(指针),

40

假如你要在函数内改变指针的指向,必须传二级指针或一级指针的引用(地址传递)
假如仅仅改变指向指向的内容,传一级指针就行了(值传递)
#include<iostream>
using namespace std;
void fun1(char *p)
{
	p = "ddd";
}
void fun2(char **p)
{
	*p = "fff";
}
void main()
{
	char *a = "sdf";
	fun1(a);
	cout << a << endl;
	fun2(&a);
	cout << a << endl;
}

fun1函数并不能改变实参a的指向,原因是实参a和形参p并不是同一个指针,他们只是指向了同一个字符串”sdf”而已

10

电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求帮助:怎样才是传址啊?谢谢