当前位置: 首页 > article >正文

c语言函数与指针

//本文有待补充。

一、函数

1.函数的定义

如果程序的逻辑比较复杂、代码量比较大,或者重复性功能比较多,那么全部写在主函数里就会显得十分冗长和杂乱。为了使代码更加简洁、思路更加清晰,C语言提供了”函数“。函数是一个实现一定功能的语句的集合,并在需要时可以反复调用而不必每次都重新写一遍。像math.h头文件下面的sin()、pow()等数学函数就是系统已经帮其实现好功能的、用户可以直接使用的函数。

返回类型 函数名称(参数类型 参数){
    函数主体
}

 2.理解函数

#include<stdio.h>
int main(){
	int n,d;
	scanf("%d %d",&n,&d);
	int x=0;
    if(n<0)n=-n;
	while(n){
		int a=n%10;
		if(a==d)x++;
        n/=10;
	}
	printf("%d",x);
	return 0;
}
#include <stdio.h>

int Count_Digit ( const int N, const int D );

int main()
{
    int N, D;
    
    scanf("%d %d", &N, &D);
    printf("%d\n", Count_Digit(N, D));
    return 0;
}
int Count_Digit ( const int N, const int D ){
    int x=0,n=N;
    if(n<0)n=-n;
    while(n){
    int a=n%10;
    if(a==D)x++;
    n=n/10;
}
    return x;
}
#include <stdio.h>

int CountDigit( int number, int digit );
    
int main()
{
    int number, digit;

    scanf("%d %d", &number, &digit);
    printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit));
    
    return 0;
}
int CountDigit( int number, int digit ){
    int x=0;
     if(number<0)number=-number;
    if(number==0)return 1;
    while(number){
    int a=number%10;
    if(a==digit)x++;
    number=number/10;
    }
    return x;
}

我们观察上面三个代码,都实现了同样的结果,只是表达方式不同,第一个代码和另外两个代码就是一般代码和函数代码的区别,做函数题的时候只需要写好函数部分就行。

然后第二个代码和第三个的区别是const(const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。)

到这里,函数主体和我们平时在主函数里写的代码并没有什么区别,我们只需要注意除函数主体以外的外壳就行。

如果函数返回类型是void,一般需要printf输出结果(万一是全局变量或指针或数组),否则是return。

对于递归函数,其实就是先判断特殊情况,然后又调用本函数(参数应作相应的改变)得到其它结果。

3.细节问题

(1)如果需要使用到一些写好的函数,注意看主函数有没有对应的头文件,否则,老老实实按照思路去写。

(2)一维数组不需要写长度,二维数组后面一个需要写。

void change(int a[],int b[][5]){
}

二、指针

1.一般情况

在函数里面的指针,其实就是多了个’*‘而已,和一般函数没有太大区别。

2.什么时候需要加或减* 

 

3.指针与数组

如果指针对应的传入是数组或字符串(字符串以’\0'结尾,如果头文件没有string.h的头文件,写函数主体时可以用这个条件来循环,同时注意有些时候要加上'\0'),那么*p=a[0](*p=&a[0],这里的’&‘可以忽略),如果p++(*p=a[1]),同样的(*(p+i)=a[i])。

如果是(*p)[n],其实就是p[n][n],也就是指针和数组是一样的,如下,两个代码皆可。

6-20冒泡排序

8
7 3 66 3 -5 22 -77 2

输出样例:

-77 -5 2 3 3 7 22 66  

 


#include <stdio.h>
void bubble (int a[ ], int n);
int main(void)
{    
  int n, a[10];
    int i;
    scanf("%d", &n);
    for (i=0; i<n;i++)
        scanf("%d",&a[i]);
    bubble(a,n);
    for (i=0; i<n; i++)
        printf("%d ",a[i]);
  printf("\n");
    return 0;
}

void bubble (int a[ ], int n){
    for(int i=0;i<n-1;i++){
        for(int j=0;j<n-1-i;j++){
            if(a[j]>a[j+1]){
                int t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
        }
    }
}

#include <stdio.h>
void bubble (int *a, int n);
int main(void)
{    
  int n, a[10];
    int i;
    scanf("%d", &n);
    for (i=0; i<n;i++)
        scanf("%d",&a[i]);
    bubble(a,n);
    for (i=0; i<n; i++)
        printf("%d ",a[i]);
  printf("\n");
    return 0;
}
void bubble (int *a, int n){
    for(int i=0;i<n-1;i++){
        for(int j=0;j<n-1-i;j++){
            if(a[j]>a[j+1]){
                int t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
        }
    }
}


http://www.kler.cn/news/159933.html

相关文章:

  • Redis 入门、基础。(五种基本类型使用场景)
  • 8、Broker进一步了解
  • OracleRac跨网段修改Public IP/VIP/Private IP/Scan IP
  • c语言经典题目
  • Distilling the Knowledge in a Neural Network(2015.5)(d补)
  • ElasticSearch篇---第三篇
  • Leetcode—383.赎金信【简单】
  • Spring Cloud Gateway与spring-cloud-circuitbreaker集成与理解
  • 【IC前端虚拟项目】git和svn项目托管平台的简单使用说明
  • LeetCode Hot100 200.岛屿数量
  • Hadoop学习笔记(HDP)-Part.03 资源规划
  • 【Pytorch使用自制数据集,Dataloader】
  • 7.上传project到服务器及拉取服务器project到本地、更新代码冲突解决
  • Leetcode每日一题学习训练——Python3版(最小化旅行的价格总和)
  • Mac-idea快捷键操作
  • Android 横竖屏切换 窗口全屏
  • C++ 构造函数与析构函数
  • Python Flask 框架开发
  • K-Radar:适用于各种天气条件的自动驾驶4D雷达物体检测
  • 图形遍历效率低?试试 R 树
  • 【华为OD题库-043】二维伞的雨滴效应-java
  • 【C++】:set和map
  • PIKA,一个神奇的AI工具
  • 《LeetCode力扣练习》代码随想录——字符串(反转字符串---Java)
  • 学生上课睡觉老师的正确做法
  • 【力扣】——可获得的最大点数(滑动窗口)
  • python炒股自动化(1),量化交易接口区别
  • 绘制折扇-第11届蓝桥杯选拔赛Python真题精选
  • SAP CA01/CA02 创建及更新工艺路线BAPI
  • 大话数据结构-查找-二叉排序树