关于函数返回值的问题!
在一个函数里,有一些值需要用特定条件判断,满足条件的就用return作为返回值返回给函数,但是c语言中函数返回值只能return回一个值。所以如果想要返回多个值的话,该用结构体还是什么?
/* http://bbs.bccn.net/thread-439278-1-1.html 问题:我有16个地址从0xE0到0xFE,我想通过一个条件判断哪些地址是可用的,哪些是不可用的,可用的地址为1,不可用 的为0,例如,通过判断只有0xE0和0xFe可用,那么应该得到1000000000000001,然后可以作为返回值使用 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> /* 地址状态数据结构: nAddress -- 地址偏移量 strStatus -- 所有地址的状态值字符串 注:为适应不确定数目的地址,此处设计为用动态分配内存方式生成字符串strStatus。若希望回避动态分配内存,可设定strStatus为 足够大的数组,比如char strStatus[16]这样的,不需留结束符,有效的地址数目由nAddress值决定 */ struct Status { size_t nAddress; char* strStatus; }; void Pause(void); Status SetStatus(const char* strStatus); int main(void) { Status theStatus = SetStatus("1000000000000001"); for (size_t index = 0; index < theStatus.nAddress; ++index) { printf_s("0x%02X = %1d\n", 0xE0 + index, theStatus.strStatus[index]); } delete [] theStatus.strStatus; Pause(); return EXIT_SUCCESS; } void Pause(void) { printf_s("\nPress any key to continue..."); _getch(); } // 重点:看明白这个函数是怎么生成状态字符串的并返回的,即知如何应用到自己的程序中 Status SetStatus(const char* strStatus) { Status retStatus; retStatus.nAddress = strlen(strStatus); retStatus.strStatus = new char[retStatus.nAddress]; for (size_t index = 0; index < retStatus.nAddress; ++index) { // 每个地址的状态以数值0和1表示 retStatus.strStatus[index] = strStatus[index] - '0'; } return retStatus; }