重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可以。返回指针实际上就是地址。
创新互联专注于英吉沙企业网站建设,响应式网站,商城网站建设。英吉沙网站建设公司,为英吉沙等地区提供建站服务。全流程定制网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
例如:
#includestdio.h
#includestdlib.h
// 动态分配 n 个字节,返回 char *
char *f(char *name, int n){name = (char*) malloc(sizeof(char)*n);
return name;
}
// 动态分配 n 个字节,返回 void *
void *v(char *name, int n){name = (char*) malloc(sizeof(char)*n);
return name;
}
main(){ char *name;
char *p;
int *x,i;
p = f(name,50); // 给 p 分配 50个字节,等于声明了 char p[50]
scanf("%s",p); // 使用 char p[50]
printf("%s\n",p);
x = (int *) v(name,40); // 给 x 分配 40个字节,(并强制转换)等于声明了 int x[10];for (i=0;i10;i++) x[i]=i+1; //使用 int x[10];
for (i=0;i10;i++) printf("%d ",x[i]);
}
1、函数直接返回一个指针类型即返回地址。
2、C语言属于高级编程语言。在C语言中一个函数不能返回局部地址即指针。
例:
int * func(void)
{
int a= 10;
int *p = a;
return p;
}
a变量的区域是func()函数,在函数内有效,出了函数就释放了,此时p指向的是一个未知
地址,属于错误用法。
正确用法:
int *p = NULL;
int * func(void)
{
p = malloc(sizeof(int));
if(p!=NULL)
{
*p = 10;
}
return p;
}
我给你从编译器角度考虑下吧!1、首先局部变量的使用范围只有在这个局部范围类有效。2、函数是模块化的思想。比如你有一个判断一个数是否是素数的函数。那么你再求100以内所有素数和的时候,main中会调用这个函数100次。这些函数编译器在处理的时候都是放在一个堆栈的。而且每个函数都占有不同的地址和空间。(递归函数尤为明显)。最关键的是,当函数返回函数值后,函数的使命就结束了。所以这个函数体在呢内存中就销毁了。你即使能从函数中返回一个局部变量。你再去读这个地址的时候。东西都不在了。3、还有一点。编译器在分配函数的空间的时候,地址不是固定的。所以你每次运行程序,你会发现
int
a=3
printf(f"%d",a),不都是一样的。所以你的问题很明了了。
首先函数返回一个指针类型即返回地址。
例:
int * func(void)
{
int a= 10;
int *p = a;
return p;
}