2021-12-07

本文介绍了指针在C语言中的应用,包括指针变量、通过指针引用数组和字符串,以及如何通过指针遍历和修改数组元素。示例代码展示了使用指针进行数组元素的输入和输出,以及如何实现数组元素的反向存储。此外,还讨论了指针作为函数参数在传递数组时的作用。
摘要由CSDN通过智能技术生成

第八章 善于利于指针

指针是什么

指针变量

通过指针引用数组

通过指针引用字符串

10个存储单元

int a[10] ;int *p;p=a;        p->a[0] p=&a[0]         p++-->a[1]        p-- -->a[n-1]        p2-p1 间隔着几个数组元素                p1+p2无意义

p=a        p+i

*(p+i)=a[i]

p+i=&a[i]

引用数组元素的计算 以上

引用数组元素 下标法a[i]

指针法       *(a+i)或        *(p+i)

有一个整型数组a,有10个元素,要求输出数组中的全部元素。(通过指针引用)

三种方法 下标法 通过数组名计算  指针变量指向数组元素1.2.3.

#include<stdio.h>
#include<conio.h>						//getch
int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,0};	//a[10]
	int *p=a,i;							//*p=a


	for(i=0;i<10;i++)					//循环输出 *p不断加i
	{
		printf("%d",*(p+i));
	}


	getch();
	return 0;
}

下标法 for scanf &a[i]for printf   a[i] 双for循环输入输出

通过数组名 双for循环  *p=a    *p

指针变量 指向数组元素

int *p=a,i

for (i=0;i<10;i++)

printf(%d,*(p+i))

p++;

*p

指针引用数组元素

下标法 a[i]

地址法 *(a+i)

用数组名做函数参数

主调函数 实参用数组名 

被调用函数 形参用指针变量

实参  数组名

和形参 数组名或 指针变量

看程序

#include<stdio.h>
#include<conio.h>                        //getch
int main()
{
    int *p,i,a[10];
    p=a;
    printf("sss");
    for(i=0;i<10;i++)scanf("%d",p++);
    for(i=0;i<10;i++)
        printf("%d",*p);
    printf("\n");
    return 0;
}

将数组a中n个整数按相反顺序存放

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
	void inv(int* x, int n);
	int i;
	int a[10];
	int* p = a;
	printf("请输入10个数字:");
	for (i = 0; i < 10; i++, p++)
	{
		scanf("%d", p);
	}
	p = a;//指针p重新指向数组首地址
	inv(p, 10);
	for (p = a; p < a + 10; p++)
	{
		printf("%d ", *p);
	}
	printf("\n");
	system("pause");
	return 0;
}
void inv(int* x, int n)
{
	int temp;
	int* i, * j;//定义指向首、尾指针
	i = x;
	j = x + n - 1;
	for (; i < j; i++, j--)
	{
		temp = *i; *i = *j; *j = temp;//交换指针所指向的变量的值
	}
}

#include <stdio.h>
void exchange(int *s, int n);                  //定义反序函数
int main()
{
    int a[5], *p;
    for (p=a; p<a+5; scanf("%d", p++));        //通过指针法输入整数
    exchange(a, 5);                            //调用反序函数
    for (p=a; p<a+5; printf("%d ", *p++));     //输出反序后的整数
    printf("\n");
    return 0;
}
//反序函数
void exchange(int *s, int n)
{
    int *i, *j, t;
    for (i=s, j=s+n-1; i<=s+(n-1)/2; t=*i, *i++=*j, *j--=t);
}

指针法

int t ,i j ,m=n-1/2

i=0;j=n-1

for(;i<=m;i++)

t=b[i];b[i]=b[j]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值