c语言函数与指针

2023-12-13 19:49:57

//本文有待补充。

一、函数

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;
            }
        }
    }
}

文章来源:https://blog.csdn.net/m0_51863774/article/details/134838064
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。