前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中指针的基础知识

C语言中指针的基础知识

作者头像
手撕代码八百里
发布2021-07-20 10:25:04
3420
发布2021-07-20 10:25:04
举报
文章被收录于专栏:猿计划

1、指针和变量的定义

代码语言:javascript
复制
//变量定义
int i,j,k;

//指针的定义
int *pi,*pj,*pk;

2、指针和变量的初始化

代码语言:javascript
复制
//变量定义
int i,j,k;

//指针的定义
int *pi,*pj,*pk;


//变量的初始化
i = 10;
j = 100;
k = 1000;

//指针的初始化
pi = &i;
pj = &j;
pk = &k;

如果你还不知道&和*的用法和作用,可以参考我这篇:

《C语言中的&和*》

3、指针如何作为参数

代码语言:javascript
复制
#include <stdio.h>

void maxV(int a,int b,int *max)
{
	if( a > b)
	{
		*max = a; 
	}else
	{
		*max = b;
	}
}

int main()
{
	//变量定义
	int i,j,k;

	//指针的定义
	int *pi,*pj,*pk;


	//变量的初始化
	i = 10;
	j = 100;
	k = 1000;

	//指针的初始化
	pi = &i;
	pj = &j;
	pk = &k;

	int max;

	maxV(i,j,&max);

	printf("最大的数是:%d\n",max);
	
	return 0;
}

结果:

代码语言:javascript
复制
最大的数是:100

4、指针如何作为返回值

代码语言:javascript
复制
#include <stdio.h>

void maxV(int a,int b,int *max)
{
        if( a > b)
        {
                *max = a;
        }else
        {
                *max = b;
        }
}

int *maxV2(int *a,int *b)
{
        return *a > *b ? a : b;
}

int main()
{
        //变量定义
        int i,j,k;

        //指针的定义
        int *pi,*pj,*pk;


        //变量的初始化
        i = 10;
        j = 100;
        k = 1000;

        //指针的初始化
        pi = &i;
        pj = &j;
        pk = &k;

        int max;

        maxV(i,j,&max);

        printf("最大的数是:%d\n",max);


        printf("最大的数是:%d\n",*maxV2(&j,&k));

        return 0;
}

结果:

代码语言:javascript
复制
最大的数是:100
最大的数是:1000

5、案例1:完成swap函数,完成两个参数交换的功能

代码语言:javascript
复制
zhenghui@zhlinux:~/codeProject/11指针$ 
zhenghui@zhlinux:~/codeProject/11指针$ cat swap.c 
#include <stdio.h>

void swap(int *p,int *q)
{
	int temp = *p;
	*p = *q;
	*q = temp;
}

int main()
{
	
	int a=10;
	int b=20;

	swap(&a,&b);

	printf("a=%d,b=%d\n",a,b);

	return 0;
}
zhenghui@zhlinux:~/codeProject/11指针$ 
zhenghui@zhlinux:~/codeProject/11指针$ 
zhenghui@zhlinux:~/codeProject/11指针$ ./a.out 
a=20,b=10
zhenghui@zhlinux:~/codeProject/11指针$ 

6、案例2:找到最大和第二大的值

题目如下:

方法一:两次循环

第一次:找出最大的值,然后记录下来最大值的位置;

第二次查找的时候把最大值的位置的数据给清空,继续寻找最大的值,那么这一次的最大的值就是第二大的。

代码语言:javascript
复制
#include <stdio.h>
#define ARRAY_SIZE(array) ((int) (sizeof(array) / sizeof(array[0]) ))

/*
 *查找最大的值和第二大的值
 * */
void find_tow_largest(int a[],int n,int *largest,int *second_largest)
{

        //1、找到最大的值
        *largest = a[0];
        //记录下来最大的值的位置
        int maxIndex = 0;

        for(int i = 1;i<n;i++)
        {
                if(*largest < a[i])
                {
                        *largest = a[i];

                        maxIndex = i;
                }
        }

        //2、找第二大的值

        //把最大的值变成最小的值
        a[maxIndex] = -1;
        *second_largest = a[0];

        for(int i = 1;i<n;i++)
        {
                if(*second_largest < a[i])
                {
                        *second_largest = a[i];
                }
"find_tow_larget.c" 54L, 863C                                                              31,2-9       顶端
                        *largest = a[i];

                        maxIndex = i;
                }
        }

        //2、找第二大的值

        //把最大的值变成最小的值
        a[maxIndex] = -1;
        *second_largest = a[0];

        for(int i = 1;i<n;i++)
        {
                if(*second_largest < a[i])
                {
                        *second_largest = a[i];
                }
        }

}

int main()
{
        int a[] = {1,5,2,4,7,5,8,234};

        int n = ARRAY_SIZE(a);

        int largest,second_largest;

        find_tow_largest(a,n,&largest,&second_largest);

        printf("最大的是:%d,第二大的是:%d\n",largest,second_largest);

        return 0;
}

执行结果:

代码语言:javascript
复制
zhenghui@zhlinux:~/codeProject/11指针$ vim find_tow_larget.c
zhenghui@zhlinux:~/codeProject/11指针$
zhenghui@zhlinux:~/codeProject/11指针$
zhenghui@zhlinux:~/codeProject/11指针$ gcc find_tow_larget.c
zhenghui@zhlinux:~/codeProject/11指针$
zhenghui@zhlinux:~/codeProject/11指针$ ./a.out
最大的是:234,第二大的是:8
zhenghui@zhlinux:~/codeProject/11指针$

方法2:排序

可以利用数组的排序来做,任何排序都可以。

这里选用插入排序来做。

代码语言:javascript
复制
zhenghui@zhlinux:~/codeProject/11指针$
zhenghui@zhlinux:~/codeProject/11指针$ cat find_tow_larget.c
#include <stdio.h>
#define ARRAY_SIZE(array) ((int) (sizeof(array) / sizeof(array[0]) ))

/*
 *查找最大的值和第二大的值
 * */
void find_tow_largest(int a[],int n,int *largest,int *second_largest)
{

	//1、找到最大的值
	*largest = a[0];
	//记录下来最大的值的位置
	int maxIndex = 0;

	for(int i = 1;i<n;i++)
	{
		if(*largest < a[i])
		{
			*largest = a[i];

			maxIndex = i;
		}
	}

	//2、找第二大的值

	//把最大的值变成最小的值
	a[maxIndex] = -1;
	*second_largest = a[0];

	for(int i = 1;i<n;i++)
	{
		if(*second_largest < a[i])
		{
			*second_largest = a[i];
		}
	}

}

/*
 *使用排序查找最大的值和第二大的值
 * */
void find_sort_tow_largest(int a[],int n,int *largest,int *second_largest)
{

	//1、初始化
	for(int i = 1;i<n;i++)
	{
		if(a[i-1] > a[i])
		{
			int j = i - 1;
			int temp = a[i];

			while(j > -1 && temp < a[j])
			{
				a[j+1] = a[j];
				j--;
			}

			a[j+1] = temp;
		}
	}

	*largest = a[n-1];
	*second_largest = a[n-2];

}



int main()
{
	int a[] = {1,5,2,4,7,5,8,234};

	int n = ARRAY_SIZE(a);

	int largest,second_largest;

	//find_tow_largest(a,n,&largest,&second_largest);
	find_sort_tow_largest(a,n,&largest,&second_largest);

	printf("最大的是:%d,第二大的是:%d\n",largest,second_largest);

	return 0;
}

结果:

代码语言:javascript
复制
zhenghui@zhlinux:~/codeProject/11指针$ ./a.out
最大的是:234,第二大的是:8
zhenghui@zhlinux:~/codeProject/11指针$
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、指针和变量的定义
  • 2、指针和变量的初始化
  • 3、指针如何作为参数
  • 4、指针如何作为返回值
  • 5、案例1:完成swap函数,完成两个参数交换的功能
  • 6、案例2:找到最大和第二大的值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档