C语言-指针作为函数形参类型

简介: C语言-指针作为函数形参类型

1. 前言

C语言函数里最常用就是指针传参和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型。这篇文章就介绍如何使用指针作为函数参数、并且使用指针作为函数返回值。


下面通过几个示例代码来演示用法。


2. 通过指针间接修改主函数里局部变量空间的值

#include <stdio.h>
#include <string.h>
void func(int *p);
int main()
{
  int a=100;
  func(&a);
  printf("a=%d\n",a); //200
  return 0;
}
void func(int *p)
{
  printf("p=%d\n",*p);
  *p=200;
}

3. 在子函数里通过指针类型间接交换main函数里局部变量空间的值

#include <stdio.h>
#include <string.h>
void func(int *a,int *b);
int main()
{
  int a=100,b=200;
  func(&a,&b); //func(100,200)
  printf("a=%d,b=%d\n",a,b);
  return 0;
}
void func(int *a,int *b)
{
  int c;
  c=*a;
  *a=*b;
  *b=c;
}
//return语句只能返回一个值
//如果函数想返回多个值,可以使用指针(形参)实现。

4. 函数返回指针类型

#include <stdio.h>
#include <string.h>
char *func(char *p);
int main()
{
  char str[]="1234567890";
  char *p;
  p=func(str);
  printf("%s\n",p); //
  return 0;
}
char *func(char *p)
{
  p+=3; //p向后偏移3个字节
  return p;
}

5. 编写一个计算字符串长度的函数

函数功能: 传入字符串,返回字符串的长度。

与strlen函数功能一样即可。

#include <stdio.h>
#include <string.h>
int my_strlen(char *p); //函数声明
int main()
{
  char buff[100];
  int len;
  printf("请输入字符串:");
  scanf("%s",buff);
  len=my_strlen(buff);
  printf("len=%d\n",len);
  return 0;
}
//每个函数的功能要单一
//计算字符串长度。  字符串特点结尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
  char *str=p;
  while(*str++!='\0'){}
  return str-p-1;
}

6. 编写一个字符串排序函数

函数功能: 传入字符串,在函数里实现字符串从大到小或者小到大排序。

注意: 从大到小或者小到大排序可以通过函数形参区分。

#include <stdio.h>
#include <string.h>
int my_strlen(char *p); //函数声明
void str_sort(char *p,char flag);//函数声明
int main()
{
  char buff[100];
  int len;
  printf("请输入字符串:");
  scanf("%s",buff);
  //进行排序
  str_sort(buff,0);
  printf("从小到大排序=%s\n",buff);
  str_sort(buff,1);
  printf("从大到小排序=%s\n",buff);
  return 0;
}
//每个函数的功能要单一
//计算字符串长度。  字符串特点结尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
  char *str=p;
  while(*str++!='\0'){}
  return str-p-1;
}
/*
函数功能: 实现字符串排序.支持从小到大或者大到小
函数形参: 
  char *p  将要排序的字符串
  char flag  选择排序方式  0表示从小到大排序  1表示大到小排序
*/
void str_sort(char *p,char flag)
{
  int len;
  int i,j,tmp;
  len=my_strlen(p);
  for(i=0;i<len-1;i++)
  {
    for(j=0;j<len-1-i;j++)
    {
      if(flag)//1表示大到小排序
      {
        if(p[j]<p[j+1])
        {
          tmp=p[j];
          p[j]=p[j+1];
          p[j+1]=tmp;
        }
      }
      else//0表示从小到大排序
      {
        if(p[j]>p[j+1])
        {
          tmp=p[j];
          p[j]=p[j+1];
          p[j+1]=tmp;
        }
      }
    }
  }
}
//unsigned char a; // 0~255   占1  =8位    1111 11111
//char a; //-128 ~ +127  

7.变量默认的系统初始化值

#include <stdio.h>
#include <string.h>
int a1;
int main()
{
  int a2;
  static int a3;
  printf("a1=%d\n",a1); //0
  printf("a2=%d\n",a2); //随机值
  printf("a3=%d\n",a3); //0
  return 0;
}
/*
全局变量默认值是0
局部变量默认值是随机值(系统没有赋值)
静态变量默认值是0
*/
目录
相关文章
|
1月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
36 3
|
1月前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
20 2
|
1月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
63 16
|
1月前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
52 1
|
1月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
61 24
|
9月前
|
存储 C语言
C语言指针进阶-2
C语言指针进阶-2
56 2
|
9月前
|
存储 C语言 C++
C语言指针进阶-1
C语言指针进阶-1
57 1
|
9月前
|
编译器 C语言
C语言-------指针进阶(2)
C语言-------指针进阶(2)
56 1
|
9月前
|
C语言
C语言---指针进阶
C语言---指针进阶
60 0
|
9月前
|
存储 C语言 C++
C语言指针详解进阶1
C语言指针详解进阶1
49 1

热门文章

最新文章