c语言返回值指针
㈠ c语言 函数指针作为返回值
C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值 return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求}以下代码可以验证上述函数的正确性:<pre t="code" l="cpp">//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int fun(int n){
printf("abcdef\n");
return n;
}
int (*f(void))(int){
return fun;
}
int main(void){
printf("%d\n",f()(100));//调用函数f,通过f返回的指针用100调用函数fun
return 0;
}输出是:abcdef100
㈡ c语言 函数返回数组指针
由于你在子函数int *shuzu(void)中定义的数组 a[4];属于局部变量,在子函数结束时会被释放,所以返回的指针变成野指针,会乱码;简单的解决方法有两种,1. 将数组定义在主函数之前(#include <stdio.h>下面),那么就变成了全局变量,不会被释放了;2.使用malloc或者calloc开空间后再赋给这个数组,这样也不会被释放了;第一种方法有缺点,以后学到全局变量的时候会知道,第二种方法估计你还没学到,不过很简单,网络一下就会了~~~
㈢ 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语言 关于函数返回值 还有指针相关的问题
*p是指针,操作的是实际的数据块,return语句是返回一个指定值给调用者,调用者可选择保留;
如果直接把int型变量a直接传递给指针p,p可能超出用户地址空间,崩溃了。
指针永远操作的是数据块,不论它是元类型(int,float,char......)还是高级结构(函数,结构体,链表,甚至类的对象),只需注意类型匹配和使用规则。
㈤ C语言 函数返回指针
首先,说一下第一个问题,第一个不交换是因为定义的k是一个指针,指针说白了就是一个指向,我指向你,他指向她,然后换成我指向她,他指向你,你把他们指向的位置交换,而并没有交换他们地址里面存储的值,这样是并没有任何区别,在最后函数结束之后,函数的那些指针指向全部释放,和修改不修改没什么两样;定义的是一个整型变量,他把s
指针指向的地址里面的值与
t
指针指向的地址的值进行了交换,这样就修改了内存里面的值,即便是函数结束了也不会释放,自然就能做到交换了。
第二个问题,存储地址是会释放,但是释放的是函数内部定义的局部变量,现在你已经把s的地址通过return
返回回来并且存在
主函数的
r
中了,所以自然就不会释放了
㈥ C语言指针与返回值
void定义过后的函数不是说它没有返回值,而是它返回的是个空,也就是null,可以加return
null,也可以不加。当你定义函数时看最后你需不需要用到这个函数最后的结果,如果不需要就可以给这个函数定义void,如果需要则相应的加上它的返回类型。每个函数在定义的时候都要加返回类型,不需要返回值则定义为void,记住null并不是代表它没有返回值,而是返回的是空,只有在java或者c#它们的构造函数才是唯一没有返回值的函数。
㈦ C语言 关于指针函数返回值
struct student *p, *q, *head;
这里head不就是 struct student 类型的指针么。
㈧ c语言 函数返回指针
你写错了,正确的应该是如下两种:
int *a(int, intint)
与
int (*a)(int ,int)
这两种形式第一种表示返回一个指向整形变量的指针,第二种为指针指向一个含有两个整形变量参数的函数。
㈨ C语言函数的返回值为指针时的问题
week_day作为lookstr()的参数,经过函数lookstr()提取之后,return(table[day]),得到一个静态字符串的指针;输入数字有误情况下return(NULL)。
㈩ C语言怎么让一个函数返回指针
这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法
首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数
int
*fun(void)//这里是指针函数
{
int
*p
=
(int
*)
malloc
(int);//动态申请内存//p在这里指向了一块合法内存的地址
return
p;
}
void
main(void)
{
int
*q
=
NULL;
q
=
fun();//fun()返回指针p所指向的地址,(指针p是在栈上创建的,所以*fun()函数运行完,指针所分配的内存被系统自动释放)这时q指向p,得到了malloc所申请到的内存
free(q);//释放动态内存
}