C程序设计--指针(对 “ 数组 ” 进行输入输出操作)

本文详细介绍了在C语言中如何使用指针访问和操作数组元素,包括直接使用数组名、利用指针变量以及通过指针进行输入输出的方法。同时,对比了指针法和下标法的不同,并解释了指针自增、指向数组元素值加1等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针引用数组元素

  • 方法一、下标法 : 如a[i]形式
  • 方法二、指针法 : 如*(a+i)、*(p+i)形式。其中a是数组名,p是指向数组元素的指针变量

** 问题:有一个整形数组a,有10个元素,要求输出数组中的全部元素**

  1. 下标法
#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	for(int i=0;i<5;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
}

  1. 通过数组名计算数组元素的地址,找出元素的值
#include<stdio.h>

int main(){
	//若需手动输入可以在循环中使用:scanf("%d",a+i);来代替scanf("%d",&a[i]);
	int a[5]={5,0,3,1,2};
	for(int i=0;i<5;i++){
		printf("%d ",*(a+i));
	}
	printf("\n");
	return 0;
}

或者:

#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	int *p=a; //另外用指针指向数组,但不能写成: int *p=&a;(错误原因:cannot convert from 'int (*)[5]' to 'int *')
	for(int i=0;i<5;i++){
		printf("%d ",*(p+i));
	}
	printf("\n");
	return 0;
}

补充说明:

#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	int (*p)[5]=&a; // 可以用指向一维数组的指针实现
	//(*p)[5]: 
	//类型表示:int (*)[4];
	//含义:p为一个指针变量,指向含有5个元素的一维数组;
	//多用于多维数组的处理中;

	for(int i=0;i<5;i++){
		printf("%d ",*(*(p)+i));
	}
	printf("\n");
	return 0;
}

  1. 用指针变量指向数组元素
#include<stdio.h>

int main(){
	int a[5]={5,0,3,1,2};
	int *p;
	for(p=a;p<(a+5);p++){
		printf("%d ",*p);
	}
	printf("\n");
	return 0;
}

用指针变量输入数据并输出数据

#include<stdio.h>

int main(){
	int a[5];
	int *p=a;

	for(int i=0;i<5;i++){//输入操作
		scanf("%d",p+i);
		//等价scanf("%d",p++);
		//等价于scanf("%d",&a[i]);
		//等价于scanf("%d",a+i); //a代表数组首元素地址,它是一个指针型常量,程序运行期间值不变(不同于p),故不能用a++;
	}
	
	//输出方式一:用 a[i] 或用 *(a+i) ; 但不能使用a++(原因:a是指针型常量)
	for(i=0;i<5;i++){
		printf("%d ",a[i]);//等价于 printf("%d ",*(a+i));
	}
	printf("\n");

	p=a;//必须把指针重新指向a的首元素

	//输出方式二:用 *(p+i) 或者 *p++ ; 注意:要把指针重新指向a的首元素
	for(i=0;i<5;i++){
		printf("%d ",*(p+i));//等价于 printf("%d ",*p++);
	}
	printf("\n");

	//输出方式三:用*p
	for(p=a;p<(a+5);p++){
		printf("%d ",*p);
	}
	putchar(10);//等价于printf("\n");

	return 0;
}

注意

  1. *p++ : 等同于 *(p++);因为++和 *同优先级;先引用p的值,实现 *p的运算,然后p自增1;
  2. *(p++) 不等同于 *(++p) ;(假设p的初值为a,即&a[0])
    前者 *(p++) :① *p ②p++ ; 若输出 *(p++),得到a[0]的值;
    后者 *(++p):①p++ ② *p; 若输出 *(++p),得到a[1]的值;
  3. ++(*p):表示p所指向的元素值+1;假设p=a,则++(*p)相当于++a[0];
    注意:是元素的值加1,而不是指针p的值加1;

看个小练习:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值