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

版权声明:本文由 Micheal 博客 创作,转载请附带链接,有问题欢迎交流。 https://blog.csdn.net/qq_42887760/article/details/83931063

指针引用数组元素

  • 方法一、下标法 : 如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;

猜你喜欢

转载自blog.csdn.net/qq_42887760/article/details/83931063