C 语言 允许函数的返回值是一个指针(地址),这样的函数称为指针函数。
快速入门案例
请编写一个函数 strlong(),返回两个字符串中较长的一个。
#include <stdio.h>
#include <string.h>
char *strlong(char *str1, char *str2){
printf("str1 的长度%d\tstr2 的长度%d\n", strlen(str1), strlen(str2));
if(strlen(str1) >= strlen(str2)){
return str1;
}else{
return str2;
}
}
int main(){
char str1[30], str2[30], *str;
printf("请输入第 1 个字符串\n");
gets(str1);
printf("请输入第 2 个字符串\n");
gets(str2);
str = strlong(str1, str2);
printf("Longer string: %s \n", str);
return 0;
}
指针函数注意事项和细节
1)用指针作为函数返回值时需要注意,函数运行结束后会销毁在它内部定义的所有局部数据,包括局部变量、局部数组和形式参数,函数返回的指针不能指向这些数据 2)函数运行结束后会销毁该函数所有的局部数据,这里所谓的销毁并不是将局部数据所占用的内存全部清零,而是程序放弃对它的使用权限,后面的代码可以使用这块内存 3)C 语言不支持在调用函数时返回局部变量的地址,如果确实有这样的需求,需要定义局部变量为 static 变量
4)代码展示
#include <stdio.h>
int *func(){
static int n = 100;
return &n;
}
int main(){
int *p = func();
int n;
printf("okoook~~");
n = *p;
printf("\nvalue = %d\n", n);
return 0;
}
应用实例
编写一个函数,它会生成 10 个随机数,并使用表示指针的数组名(即第一个数组元素的地址)来返回它们。
#include<stdio.h>
#include<stdlib.h>
int *f1() {
static int arr[10];
int i;
for(i=0; i<10; i++) {
arr[i] = rand();
}
return arr;
}
void main() {
int *p;
int i;
p = f1();
for(i=0; i<10; i++) {
printf("%d\n",*(p+i));
}
}
|