c语言函数返回字符串时必须要用指针吗?如果返回结构体呢?函数在返回那些类型值时必须要用指针?

来自:作文摘要    更新日期:早些时候
c语言函数返回字符串时必须要用指针吗?如果返回结构体呢?函数在返回那些类型值时必须要用指针?~

c语言函数返回字符串时必须要用指针吗?
严格意义上的返回(通过返回值)是这样的
数组是不允许的
如果返回结构体呢?
结构体不需要使用指针。结构体是值类型,
就当基本类型用就行了
函数在返回那些类型值时必须要用指针?
就你说的字符串吧,暂时没想到其他的

您好,很高兴能为您解决问题。

一般来说是的。还有一种方法:返回数组。虽然C语言返回不能为数组,但是还是可以实现的:传递数组的指针,接收的时候再用*(返回值)就可以收到了。

希望我的解答能帮到您,望采纳!

所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。
如:
int *ap(int x,int y)
{
...... /*函数体*/
}
表示ap是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。
【例】本程序是通过指针函数,输入一个1~7之间的整数,输出对应的星期名。
main(){
int i;
char *day_name(int n);
printf("input Day No:\n");
scanf("%d",&i);
if(i<0) exit(1);
printf("Day No:%2d-->%s\n",i,day_name(i));
}
char *day_name(int n){
static char *name[]={ "Illegal day",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"};
return((n<1||n>7) ? name[0] : name[n]);
}

本例中定义了一个指针型函数day_name,它的返回值指向一个字符串。该函数中定义了一个静态指针数组name。name数组初始化赋值为八个字符串,分别表示各个星期名及出错提示。形参n表示与星期名所对应的整数。在主函数中,把输入的整数i作为实参,在printf语句中调用day_name函数并把i值传送给形参n。day_name函数中的return语句包含一个条件表达式,n值若大于7或小于1则把name[0]指针返回主函数输出出错提示字符串“Illegal day”。否则返回主函数输出对应的星期名。主函数中的第7行是个条件语句,其语义是,如输入为负数(i<0)则中止程序运行退出程序。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。
应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如int(*p)()和int *p()是两个完全不同的量。
int (*p)()是一个变量说明,说明p是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少。
int *p()则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。作为函数说明,在括号内最好写入形式参数,这样便于与变量说明区别。
对于指针型函数定义,int *p()只是函数头部分,一般还应该有函数体部分。

在ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传向形参的只是地址,从而减少了时间和空间的开销。
【例】计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程。
struct stu
{
int num;
char *name;
char sex;
float score;}boy[5]={
{101,"Li ping",'M',45},
{102,"Zhang ping",'M',62.5},
{103,"He fang",'F',92.5},
{104,"Cheng ling",'F',87},
{105,"Wang ming",'M',58},
};
main()
{
struct stu *ps;
void ave(struct stu *ps);
ps=boy;
ave(ps);
}
void ave(struct stu *ps)
{
int c=0,i;
float ave,s=0;
for(i=0;i<5;i++,ps++)
{
s+=ps->score;
if(ps->score<60) c+=1;
}
printf("s=%f\n",s);
ave=s/5;
printf("average=%f\ncount=%d\n",ave,c);
}

本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。然后以ps作实参调用函数ave。在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。
由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。

(1)也可以返回字符串对象
(2)可以返回结构体对象,但效率不高,有更好的方式
(3)这个依赖于函数设计者的意图,没有哪种类型是必须要用指针来返回的。

函数设计除了实现正确功能的同时,提高函数效率也是非常必要的,尤其是该函数被频繁调用。而函数的返回方案设计好坏往往影响着函数的效率,也体现了设计者的水平。

没有什么是必须的,只有最优的和最好的。

这个问题实际上不是那么简单可以说清楚的,你可以hi我,我给你举些例子,不过你要有给我加分的思想准备。

在函数体内出现动态分配内存的情况,就需要考虑返回指针。
比如上述函数返回类型为字符串,实际一般是返回一个char指针,因为如果是用string来代替返回,在这个字符串相当庞大的时候将会造成很大的临时空间开销。


c语言函数返回字符串时必须要用指针吗?如果返回结构体呢?函数在返回那些类型值时必须要用指针?视频

相关评论:
  • 18763697872c语言函数返回字符串时必须要用指针吗?如果返回结构体呢?函数在返回那...
    芮儿阅所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。定义指针型函数的一般形式为:类型说明符 *函数名(形参表){ …… \/*函数体*\/ } 其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明...

  • 18763697872C语言中函数如何返回字符串?
    芮儿阅局部变量地址,必须在函数中用malloc()函数进行地址分配 采用全局变量地址 参考代码:void func1( char *s ) \/\/通过形参返回字符串 { strcpy( s, "hello");} char * func1_1( char *s ) \/\/另一种写法 { strcpy( s, "hello");return s ; \/\/返回形参地址,方便程序调用 } char *...

  • 18763697872C语言可以返回字符串吗?
    芮儿阅C语言返回字符串有四种方式:1。使用堆空间,返回申请的堆地址,注意释放2。函数参数传递指针,返回该指针3。返回函数内定义的静态变量(共享)4。返回全局变量使用分配的内存,地址是有效 \\x0d\\x0achar *fun() \\x0d\\x0a{ \\x0d\\x0achar* s = (char*)calloc(100, sizeof(char*) ); \\...

  • 18763697872在C语言中,主函数是不是必须要有返回值?
    芮儿阅在C语言中,主函数必须要有返回值。main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。在C语言标准中强制要求main函数的返...

  • 18763697872c语言函数问题:1.不需要返回值的函数,即直接让函数输出某个值或符号...
    芮儿阅void表示函数无返回值,也就不需要写return。如没有返回值的函数,void要写,否则默认返回值是int型需要return语句。关于函数返回多个值,有很多方法:一、不返回,函数返回值依然是void,但传值的时候传变量地址,那么在函数运行中改变变量地址里的值,函数运行结束,外面实参变量也改变了。比如void fun(...

  • 18763697872C语言若自定义要求函数名返回一个值,则该函数体中必须要有return语句...
    芮儿阅错的。这个函数接受2个整形,m和n,函数内容是一个循环,进行n次,每次将p(初始值1)赋值为p*m,最后返回p的值。比如x=p(2,3),就是m=2,n=3,运行3次循环,第一次,p=p*m=1*2=2,第二次,p=p*m=2*2=4,第三次,p=p*m=4*2=8,最后返回8,x=8。

  • 18763697872C语言函数如何返回字符串?
    芮儿阅1 char*formatTime(time_t t) ,函数类型定义为指向字符串的指针,你返回str就行 2 如果你在主函数中定义str的话,再把他传给被调用函数,这样被调用函数改变了str的值后,在主函数那边即可输出,被调用函数不需要返回任何值更省事

  • 18763697872c语言指针中编写函数返回结果字符串的首地址,那返回的是字符串还是首...
    芮儿阅char* pre(char* a) \/\/一个修改传入字符串首字符为0的函数{ a[0]='0';return a; \/\/返回修改后的首地址,直接返回a,此时返回的a指针指向的地址与main函数中s指向同一个地址。也就是void* f指向的地址与s数组的地址相同。}int main(int argc, char *argv[]){char s[20]={"\\...

  • 18763697872C语言的main函数必须有返回值吗?
    芮儿阅按标准来说,C的main函数是需要有返回值的。标准中main函数返回类型是int的,所以需要一个返回值。但是由于历史原因,很多地方可以看到没有返回值的main。比如直接main()或者说void main() 但是这样一般编译器也不会认为错误,不过建议还是写标准的C的main函数,最好有一个返回值,0表示正常退出。

  • 18763697872C语言系列之C语言如何返回字符串数组
    芮儿阅C语言实现返回一个字符串数组,是没有这种功能的,但是可以用指向数组的指针来实现:解释:char **p 这个p就是指向数组的指针,它指向一个数组的起始地址. 想要引用里面的数组时,直接使用p[i] 即可。我们知道C语言里面的各种数组,本质上都是指针,并且函数其实也是不能把数组当作参数的,实际上都是...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网