免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1340 | 回复: 9
打印 上一主题 下一主题

C語這新手請教. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-14 17:45 |只看该作者 |倒序浏览
各位,
若果有一個函數定義如下:

  1. typedef int BOOL;
  2. typedef  signed char INT8;
  3. typedef  signed short INT16;
  4. typddef  signed long INT32;
  5. typedef  unsigned char UINT8;
  6. typddef  unsigned short UINT16;
  7. typddef  unsigned long UINT32;

  8. function123(INT16 handle, UINT8 id, UINT8 *len, UINT8 *info);
复制代码


我在程序內調用這function123

  1. ... ...
  2. INT16 handle;
  3. UINT8 id;
  4. UINT8 *length;
  5. UINT8 *information;

  6. id = 6;

  7. function123(handle, id, length, information)
  8. ... ...
复制代码


請問我這樣調用function123對嗎?
但在編譯時會在 function123(handle, id, length, information) 出現警告如下:

  1. warning: passing arg 3 of function123 makes pointer from integer without a cast
  2. warning: passing arg 4 of function123 makes pointer from integer without a cast
  3. warning: `length` might be used uninitialized in this function
  4. warning: `information` might be used uninitialized in this function
复制代码


若我把length 及 information 改為
UINT8 *length = NULL;
UINT8 *information = NULL;

printf("Information is (%s)\n", information);
警告沒有了, 編譯成功, 但當想print出information時, 會是(NULL)的. 請問我應該怎樣做才是正確的調用function123從而拿取出information的資料呢.

請各位指教指教.

[ 本帖最后由 惠繪洋 于 2006-7-14 18:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-07-14 17:55 |只看该作者
我怎么感觉反了呢?
typedef BOOL int;
-〉typedef int BOOl;?

论坛徽章:
0
3 [报告]
发表于 2006-07-14 18:10 |只看该作者
原帖由 soul_of_moon 于 2006-7-14 17:55 发表
我怎么感觉反了呢?
typedef BOOL int;
-〉typedef int BOOl;?


是. 對的.. 打錯字.

請再指教. thx

论坛徽章:
0
4 [报告]
发表于 2006-07-14 18:18 |只看该作者
UINT8 *length = "123";
UINT8 *information = "here";
不就可以了

论坛徽章:
0
5 [报告]
发表于 2006-07-14 21:50 |只看该作者
原帖由 soul_of_moon 于 2006-7-14 18:18 发表
UINT8 *length = "123";
UINT8 *information = "here";
不就可以了


但這是初始化, 並沒有實在的數.
我只有使用
UINT8 *length;

length = (char *)malloc(100);
來初始化, 只是想知道應該怎樣初始化算好呢?
再請指教.
謝謝.

论坛徽章:
0
6 [报告]
发表于 2006-07-14 22:17 |只看该作者
类型不匹配。
原型中第一个参数要求INT16,而你传进一个INT16*
而且指针也没落地。

这是基本语法问题

论坛徽章:
0
7 [报告]
发表于 2006-07-15 10:22 |只看该作者
原帖由 JohnBull 于 2006-7-14 22:17 发表
类型不匹配。
原型中第一个参数要求INT16,而你传进一个INT16*
而且指针也没落地。

这是基本语法问题


謝謝 JohnBull,
請問應該如何去更正呢?
我看了書都沒有對這方面有詳細的解說. 請你指教小弟. 謝謝.

论坛徽章:
0
8 [报告]
发表于 2006-07-15 10:52 |只看该作者
你这么着试试:


  1. INT16 handle;
  2. UINT8 id;
  3. UINT8 length;
  4. UINT8 information;

  5. id = 6;

  6. function123(handle, id, &length, &information)
复制代码


又不知道 function123 的功能,没法下定论

论坛徽章:
0
9 [报告]
发表于 2006-07-15 12:44 |只看该作者
原帖由 isjfk 于 2006-7-15 10:52 发表
你这么着试试:


  1. INT16 handle;
  2. UINT8 id;
  3. UINT8 length;
  4. UINT8 information;

  5. id = 6;

  6. function123(handle, id, &length, &information)
复制代码


又不知道 function123 的功能,没 ...


function123 它會返回 length 及 information 的值...
所以當我要定義時應該如何做呢? thx

论坛徽章:
0
10 [报告]
发表于 2006-07-15 14:00 |只看该作者
函数要返回多个值的话做法基本上就是在参数中传递指针。比如你打算让函数返回 len 和 info 两个值,函数可以这么定义:

  1. void fun1(int fileno, int* len, int* info) {
  2.     // do something here...
  3.     *len = x;
  4.     *info = y;
  5. }
复制代码


调用的时候这么做:

  1. int len;
  2. int info;

  3. fun1(0, &len, &info);
复制代码

这样 fun1 执行完以后变量 len 和 info 里的值就是 fun1 返回的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP