c语言中,返回指针的函数的问题

作者&投稿:乔适 (若有异议请与网页底部的电邮联系)
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);//释放动态内存
}

1、一样的不安全

2.1 在你main那里free
2.2 在这个例子里不是必须,main返回后释放所有内存。但这个习惯是必须的,有分配就有释放。特别是像一些服务程序,运行起来之后就不停止的,如果一直不释放,一段时间后内存就爆了。

int number[5]={0},*p1;
这里的number数组会在退出函数后被释放,所以,其中保存的值在从函数返回后不再具有可读性.

改为如下:

static int number[5]={0},*p1=number;

或者用malloc()动态分配空间创建数组


c语言中的指针应该怎么理解?
怎么样?找出指针的类型的方法是不是很简单? 2。指针所指向的类型。 当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译 器将把那片内存区里的内容当做什么来看待。 从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符 *去掉,剩下的就是指针所指向的类型。例如: (1)int *...

c语言如何定义一个函数可以返回多个值回去给主函数呀。
函数的返回值顶多是一个数,通过函数直接返回的这个数只有在是指针时才能给出多个数据结果。可以考虑以下几个方法:返回指针:int* display() { int *p; p=malloc(sizeof(int)*6); ... return p; } \/\/用p[0]~p[5]计算各位 void main() { int *p; p=display(); ... free(p); }...

C语言 指针函数 函数指针 什么区别联系?最好有例子?一定采纳
函数指针可以绑定到与其返回值和参数类型都相同的函数上。比如:int foo(int, double); \/\/ 函数声明int (*bar)(int, double) = foo; \/\/ 函数指针在上面的初始化中,写成&foo也是可以的。函数指针的最大特点就在于,其不能做一元+-运算(当然也不能做+= -= ++ --等),且对其做一元*运算...

C语言中的指针问题到底是怎么回事~
在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样处理的:它把指针ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于地址是用字节做单位的,故ptr所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。由于char...

c语言,编写函数int* find(),找出一维整型数组中的最大数,返回其...
include <stdio.h>int* find(int *a,int n){int *p,*p1; for(p=p1=a;p*p1)p1=p; return p1;}int main(){int a[10]={12,34,23,5,34,31,32,33,45,15},*p; p=find(a,10); printf("Max=a[%d]=%d\\n",p-a,*p); return 0;} ...

c语言中void的意思
在C语言中,void是一种特殊的数据类型,用于表示无类型或没有值的情况。它用来指示函数不返回任何值,或者指示指针没有特定的数据类型。void在c语言中主要有两个常见的用法:函数返回类型:如果函数不返回任何值,可以将其返回类型声明为void。指针类型:在C中,可以使用void指针来存储任何类型的指针。这...

c语言中怎样返回一个数组?
在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。在大多数情况下,一维数组和一维指针是可以通用的。比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。 代码可以写成如下形式:int *int_array_create(int n)\/\/...

c语言指针中编写函数返回结果字符串的首地址,那返回的是字符串还是首...
返回的是地址,这个地址可按照你给定的类型去寻址 比如一个简单的例子:char* pre(char* a) \/\/一个修改传入字符串首字符为0的函数{ a[0]='0';return a; \/\/返回修改后的首地址,直接返回a,此时返回的a指针指向的地址与main函数中s指向同一个地址。也就是void* f指向的地址与s数组...

C语言中,return语句怎么样返回一个数组?
首先,C\/C++只能返回数组的指针而不能返回整个数组。即使返回数组的指针,但如果函数中的数组是自动性质,那将是危险的。这是比较正宗的表述。如果确实需要从函数中返回自动性质的数组的全部元素值,有没有办法呢?有。由于C\/C++是允许返回结构体的,可以定义一个结构体模板,把数组作为成员安排在其中,...

C语言指针作为函数参数,返回值为0
return *p; \/\/返回指针p指向的地址}int main(){ double *p=... \/\/初始化指针p double *q; \/\/用于接收改变的指针 ... q=a(&p); \/\/将指针p的地址传递给a ... return 0;} 如果是用作dll的话,那么你应该使用和相应语言兼容的类型才行 ...

中卫市17863585449: C语言 返回指针的函数 问题 -
商单赛络: 返回指针 要看这个局部指针变量在函数运行后 保存了哪个空间的地址了 指针里的值是可以返回的 就像你说的 “ return i,主调函数知道一个i就可以了 ” 同样主函数 知道一个指针里的地址就可以了. 但是这个地址入口的空间现在可用否,那要看具体情况了 1 此地址所指向的空间 是个局部变量 也就是存在栈区,那么在申请次局部变量的函数结束时,局部变量被释放,用户没有使用他的权限了 出错 2 此地址所指向的空间 不是局部变量,比如是个静态变量 全局变量 或者是malloc申请的存在堆中的,那么他就不是你随着函数的离去二离去了,他任然存在,结果可用 正确

中卫市17863585449: C语言函数的返回值为指针时的问题 -
商单赛络: week_day作为lookstr()的参数,经过函数lookstr()提取之后,return(table[day]),得到一个静态字符串的指针;输入数字有误情况下return(NULL).

中卫市17863585449: c语言 函数返回数组指针? -
商单赛络: 由于你在子函数int *shuzu(void)中定义的数组 a[4];属于局部变量,在子函数结束时会被释放,所以返回的指针变成野指针,会乱码;简单的解决方法有两种,1. 将数组定义在主函数之前(#include 下面),那么就变成了全局变量,不会被释放了;2.使用malloc或者calloc开空间后再赋给这个数组,这样也不会被释放了;第一种方法有缺点,以后学到全局变量的时候会知道,第二种方法估计你还没学到,不过很简单,百度一下就会了~~~

中卫市17863585449: (C语言)返回指向数组的指针的函数 -
商单赛络: 第二种方法是因为类型不匹配(double*与(double(*)[ROW])产生错误,而且((double (*)[row])matrix); 里的[row]是一个变量,而指向数组的指针 double (*matrix)[ROW]里的ROW只能使用常量,所以这里也有一个错误.由于指向数组的指针指向的数组长度(即第一维)必须是确定的常量,所以你这种行列皆不确定的数组不能用这种形式返回.我觉得用第一种形式好一点,访问二维数组a[i][j]可以转换成访问一维数组a[i*row+j];//row是列数 如果非要返回二维数组的话,我想用指针数组会好一点,不过分配空间的时候就麻烦一点.

中卫市17863585449: C语言指针返回问题 -
商单赛络: 1.返回函数里面局部变量的地址,而函数结束后,该地址就释放掉了,所以在函数外访问、修改该地址都是非法的,结果不可知2.指针为野指针,然后向野指针赋值(*ptr=10),非法访问,结果不可知,容易崩溃,切函数返回的也是野指针3.函数内申请动态内存空间,函数结束,该内存空间不会释放,函数返回该内存空间地址,外部可以使用,但外部需要手动释放该空间(free(动态内存空间地址))

中卫市17863585449: c语言中函数返回值的问题 -
商单赛络: 楼主,你想知道什么?真没搞懂...比如int testFun();这么一个函数是返回int型的函数.也即函数结束要有一个return空格、值的语句.比如void testFun2();这么一个函数不返回任何类型(void解释为虚无的).不需要return语句,当然,加了也不会错,不过return后不接任何值,后面加一个分号就算语句结束.任何函数执行return语句就退出该函数.

中卫市17863585449: c语言中,返回指针的函数的问题 -
商单赛络: int number[5]={0},*p1;这里的number数组会在退出函数后被释放,所以,其中保存的值在从函数返回后不再具有可读性.改为如下:static int number[5]={0},*p1=number;或者用malloc()动态分配空间创建数组

中卫市17863585449: 关于C语言中指针函数的问题 -
商单赛络: 不行, 原因是found函数已经声明成返回一个int指针的函数了,如果不声明p为指针则在p=founc(a,n)时会因为类型不匹配而报错. 两种方法可以解决: 1,直接省略掉变量p,在printf语句中直接用printf("%d", *found(a,n));来输出结果; 2,修改found函数为: int found(int b[10], int n){ return b[n-1];}则p可以直接声明为int, 且赋值时用p=found(a,n); 输出时用printf("%d", p); 可以看到这样改动的比较多.

中卫市17863585449: 这个C语言返回指针问题 -
商单赛络: return返回的的确是数组的首地址,但是你这个是一个字符数组,字符数组其实相当于是一个字符串 ,所以数组名就是指向这个字符串的指针.再加上你的printf函数调用使用的是%s,%s表示打印字符串(%c是打印一个字符),%s后面对应的又是数组名,所以就把整个字符串打印出来了.

中卫市17863585449: c语言的函数如何返回指针(请举例) -
商单赛络: char* foo() {char* sz="abc";return sz; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网