Chinaunix
标题:
linux编程
[打印本页]
作者:
mt_glass
时间:
2015-03-13 09:18
标题:
linux编程
有一个整形数组如 int a[10];有一个函数foo(char *str),来调用这个整形数组,但是foo函数的参数是char型而数组的类型是整型,这个该怎么办啊,请他家帮我看看,谢谢了
作者:
zsszss0000
时间:
2015-03-13 09:37
本帖最后由 zsszss0000 于 2015-03-13 09:37 编辑
#include <stdio.h>
#include <stdlib.h>
void func(char * str)
{
int *pint;
pint=(int *)str;
int i;
for(i=0;i<10;i++)
{
printf ( "a[0] is %d\n",*pint );
pint++;
}
}
int main ( int argc, char *argv[] )
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
func((char *)a);
return EXIT_SUCCESS;
}/* end of function main */
复制代码
作者:
mt_glass
时间:
2015-03-13 10:10
回复
2#
zsszss0000
谢谢!我遇到列一个面试题,当时我就是这样强制转化了一下,他直接问我这样可以吗?让我在想想,我一直没有明白,所以问问,我刚才试过你的代码了,是可以的,我想知道这个之间的强制转化是可以的吗?foo((char*)a)
作者:
zsszss0000
时间:
2015-03-13 11:07
会不会是大小端的问题?
回复
3#
mt_glass
作者:
mt_glass
时间:
2015-03-13 11:32
回复
4#
zsszss0000
这个我也不是很清楚,现在我都没有思路了,从哪开始着手这个问题了
作者:
羽剑天涯
时间:
2015-03-13 15:43
要看foo的作用以及这样调用的目的是什么,然后才知道该怎么处理
作者:
zsszss0000
时间:
2015-03-13 16:19
那肯定是让他处理整形数之类的
回复
6#
羽剑天涯
作者:
mt_glass
时间:
2015-03-13 19:30
回复
6#
羽剑天涯
直接这样一问,我就说强制转化一下,结果让我在想想,我就懵了,不知道他想知道什么了?
作者:
羽剑天涯
时间:
2015-03-14 22:42
如果foo(char*)是对char *数组进行一种操作,每个元素是char(如默认长度是10,对其排序),而另外一个整数数组a[10],也需要进行同类型的操作,不考虑溢出危险,可以定义一个char b[10],依次把a[10]各元素赋值过去,然后,再传递b数组进去,执行完,在把b依次赋值给a。
不过如果foo不是这个作用(如计算字符串的长度),而且这样调用的目的也不是这个foo原始的功能,就要弄清楚foo的作用及这样做得目的了
回复
8#
mt_glass
作者:
mt_glass
时间:
2015-03-28 09:26
回复
9#
羽剑天涯
谢谢了,学习了。
作者:
mt_glass
时间:
2017-08-17 16:08
通过这几年的学习和成长,突然回头看自己发的帖,决定把这个问题解决了,其实很简单,比如定义int a[10], foo(char*p),在传递过程中将数组元素中第一个元素的首地址传进去如foo((char*)&a[0]);这样就可以传递了,通过对memcpy将当前的地址在放到另一个相同长度的数组里面,就能通过这样传递参数了。
作者:
mt_glass
时间:
2017-08-17 16:17
#include <stdio.h>
#include <stdlib.h>
void func(char * str)
{
int b[10];
int i;
memcpy(&b,str,sizeof(b));
for(i=0;i<10;i++)
{
printf ( "%d\n",b[i] );
}
}
int main ( int argc, char *argv[] )
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
func((char *)&a[0]);
return EXIT_SUCCESS;
}/* end of function main */
作者:
eveson
时间:
2018-05-02 00:42
只有写foo的人知道怎么用,其他人不知道,也就是说函数设计的不具有通用性
作者:
eveson
时间:
2018-05-02 11:48
不具有通用性
作者:
mt_glass
时间:
2018-05-08 16:32
是的,一般设计函数都会foo(char*buffer,int len);方式来告诉buffer的长度,这个列子只是个例。
作者:
mt_glass
时间:
2018-05-08 16:35
回复
14#
eveson
是的,一般设计函数都会foo(char*buffer,int len);方式来告诉buffer的长度,这个列子只是个例。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2