当前位置:首页 » 编程语言 » c语言函数返回值指针
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言函数返回值指针

发布时间: 2022-01-13 11:50:54

❶ C语言函数返回指针

第二种方法,跟第一种只是参数和返回值不同而已。
初看时需要在第二种中申请内存返回出来,但是字符串为局部变量时其实也是存在静态内存中的,不会因为函数退出而失效,直接将函数内拼装的字符串返回出来也是可以的,你也可以加上static定义什么的也没问题。

❷ C语言,用返回值为指针的函数解决

搞定

额 , 现在可以直接用b , 因为 数组 变量b 本身是不能修改的, 而且 函数结束后 b 的生命就结束了。
所以 我在 b的前面 加了static

for(i=r;*(ch+i)!='\0';i++) //找到 目标函数的结尾
for(j=0;j<=i-r+1;j++) // i-r 是 从m到最后字符串的长度
*(b+j)=*(ch+r-1+j); //拷贝
char * x= b;
return x;

复制以下的

#include<stdio.h>
void main()
{
char a[20];int m=0;char*fu(char*,int);

printf("输入字符:");
gets(a);

printf("输入起始位数:");
scanf("%d",&m);

printf("%s\n",fu(a,m));

}

char *fu(char*ch,int r)
{static char b[20];int i,j;

for(i=r;*(ch+i)!='\0';i++)
for(j=0;j<=i-r+1;j++)
*(b+j)=*(ch+r-1+j);
char * x= b;
return x;

}

❸ C语言如何声明一个返回函数指针的函数

C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:

int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值

return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求

}

以下代码可以验证上述函数的正确性:

//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intfun(intn){
printf("abcdef ");
returnn;
}
int(*f(void))(int){
returnfun;
}
intmain(void){
printf("%d ",f()(100));//调用函数f,通过f返回的指针用100调用函数fun
return0;
}

输出是:

abcdef

100

❹ C语言指针与返回值

函数A的返回值错误。虽然地址和指针很像,但还是不同的两个东西。而且,一旦出了函数A,返回的地址,也就该被回收,会导致程序出错。是非常危险的行为。
举个例子说明下吧。
int *p=a;
这个,在数值上,p是和a的地址相等的,也就是有p==&a。
这时如果a=1;那么你知道*p==1,是真。
但是此时,p存储的是a的地址,p还有自己本身的地址。就好比,你(p)坐在座位上,用手指向另一个座位(&a)一样。那个座位就是a的地址,上面坐着谁(1),就是a的值。你本身就是指针了。
所以说,返回值是指针和地址是完全不同的两个概念。所以就是错误的!

B函数为啥正确呢?因为NULL是一种特殊的指针,叫空指针。所以是可以算作正确的。

❺ C语言返回结构指针的函数

#include"stdafx.h"
#include"string.h"
structstudent
{
intnum;
charname[20];
charsex;
};
structstudent*fun(structstudentstu)
{
structstudent*p;
stu.num=10;
strcpy_s(stu.name,"abc");
stu.sex='G';
p=&stu;
returnp;
}
intmain()
{
structstudentstu1,*pp;
stu1.num=10;
strcpy_s(stu1.name,"def");
stu1.sex='M';
printf("num=%dname=%ssex=%c ",stu1.num,stu1.name,stu1.sex);
pp=fun(stu1);
printf("num=%dname=%ssex=%c ",(*pp).num,(*pp).name,(*pp).sex);//name输出乱码,求解释
return0;
}

❻ C语言函数的返回值为指针时的问题

week_day作为lookstr()的参数,经过函数lookstr()提取之后,return(table[day]),得到一个静态字符串的指针;输入数字有误情况下return(NULL)。

❼ C语言指针作函数参数时的返回问题

首先,弄懂函数参数都是靠值传递。指针也是。
进入函数后,函数创建几个空间给形参,再把实参数值拷过来。退出函数时,把形参空间释放,则影响不到实参。这就是值传递。
swap(int *p1,int *p2)函数首先创建两个空间,是指针,再把实参复制过来,即p1=pointer_1=&a,p2=pointer_2=&b,改变p1,p2就分别指向了a,b.改变p1指向的值就是改变了a。然后交换*p1,*p2,ab就互换了。函数退出,释放p1,p2所占的内存空间。但是a,b值互换了。swap函数没有改变实参pointer_1,pointer_2的内容,只是借助指针实现了巧妙的干坤大挪移。

学到c++后有个引用例外,那是后话了。

++++++++++++++++++++++华丽丽的分割线+++++++++++++++++++++

其实很简单,不要硬记规律,要理解了。
第二个例子中swap(int x,int y)没有改变原来实参a,b的值
第一个例子中swap(int *p1,int *p2)也没有改变原来两个实参pointer_1,pointer_2的值,他们值分别是是a,b地址,但pointer_1,2指向的内容改变了,改的是以pointer_1,pointer_2的值为地址的内存单元的值。

❽ C语言 函数返回指针

首先,说一下第一个问题,第一个不交换是因为定义的k是一个指针,指针说白了就是一个指向,我指向你,他指向她,然后换成我指向她,他指向你,你把他们指向的位置交换,而并没有交换他们地址里面存储的值,这样是并没有任何区别,在最后函数结束之后,函数的那些指针指向全部释放,和修改不修改没什么两样;定义的是一个整型变量,他把s
指针指向的地址里面的值与
t
指针指向的地址的值进行了交换,这样就修改了内存里面的值,即便是函数结束了也不会释放,自然就能做到交换了。
第二个问题,存储地址是会释放,但是释放的是函数内部定义的局部变量,现在你已经把s的地址通过return
返回回来并且存在
主函数的
r
中了,所以自然就不会释放了

❾ C语言 带指针的函数 如何让它return指针

把a作为参数传指针进函数里。另外a在函数外分配内存并释放,不要在函数里分配。遵循谁分配,谁释放的原则。

❿ C语言里返回函数的指针

#include <stdio.h>
void main()
{
int *func(int pt,int pt2);
int a;
int b;
int *p2;/*我把这一句放这编译器才不出错*/
scanf("%d%d",&a,&b);

p2=func(a,b);
printf("%d",*p2);

}
int *func(int pt,int pt2)
{
if(pt<pt2)
return &pt2;
return &pt;/*加了这一句*/
}