joke100 不好意思!

hydralisk 2001-03-27 11:05:00
你在其他的CPP中使用本函数之前,用
extern char** GenaralPtr(const int h, const int w);
声明一下才能使用???

对不起,我很菜第一次用VC写东西
两个函数都在一个类里呀一个调用另一个为什么要声明呢?CPP是什么意思
...全文
93 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hydralisk 2001-03-28
  • 打赏
  • 举报
回复
ok 你说 .cpp 我就明白了
joke100 2001-03-27
  • 打赏
  • 举报
回复
CPP指的是可执行文件呀,就是文件的扩展名是CPP的...
全局函数跟全局变量一样,在同一个文件里可以直接使用.
但在不同的文件里这个全局函数或者全局变量必须用extern声明以后才可见...
即使是同一个类如果全局函数的定义跟使用不在同一个可执行文件中也要这么办才行...

下面这个函数产生数产生的是一个指针数组,每个数组成员又是一个数组指针,,,跟普通的二维数组不同.
使用方法如下,比如:
DWORD* pMe = GenaralPtr(5, 10);
char* pStr0 = (char*)pMe[0]; // 取出第1个字符数组
....
char* pStr9 = (char*)pMe[9]; // 取出第10个字符数组

pStr0[0] = 'a'; // 为第一个字符数组的第一个元素赋值
pStr0[1] = 'b'; // 为第一个字符数组的第二个元素赋值
pStr0[2] = 'c'; // 为第一个字符数组的第三个元素赋值
...

************************************************************
函数的重新实现:
DWORD* GenaralPtr(const int h, const int w)
{
char* pByte = NULL;
DWORD* pdwFirst = NULL; // 地址为4字节
pdwFirst = (DWORD*)malloc(h * sizeof(DWORD));
DWORD* ppReturn = pdwFirst;
int i = 0;
for (; i < h; i++)
{
pByte = (char*)malloc(w);
pdwFirst[i] = pByte;
}
return ppReturn;
}

因为使用的是堆内存,你在最后要手工释放才行,不然会有内存泄露的。。。
我再写一个释放的函数吧

void FreeCharPP(DWORD* ppMe, const int h)
{
if (!ppMe)
return;
for (int i = 0; i < h; i++)
free(ppMe[i]);

free(ppMe);
}

如果在其他的CPP中使用这种全局函数。
必须先用
extern DWORD* GenaralPtr(const int h, const int w);
extern void FreeCharPP(DWORD* ppMe, const int h);
声明后才可以使用。。。


16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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