C语言 第七章 指针

C语言 第七章 指针

例1.使用指针变量输出数据

1.两个*p含义不同,第一个是定义指针变量,第二个是表示所指变量的值。

2.&a表示a的地址。

3.定义指针变量时的数据类型是指指针变量指向的数据类型。

#include<stdio.h>
int main()
{
	int a=2008;
	int *p;
	p=&a;
	printf("%d\n",*p);
	return 0;
}

使用指针变量:

1.初始化:int m;  int *p=&m;

2.赋值:int m=12,*p,*q; p=&m; q=p;

3.输入数据:scanf("%d",p); == scanf("%d",&score);

4.输出:printf("%d\n",*p);

例2.指针变量应用实例

#include<stdio.h>
int main()
{
	int a,b,*p,*p1,*p2;
	printf("Input a,b");
	scanf("%d,%d",&a,&b);
	p1=&a;
	p2=&b;
	if(a<b)
	{
		p=p1;
		p1=p2;
		p2=p;
	}
	printf("%d,%d\n",*p1,*p2);
	return 0;
}

指针与数组

指针与一维数组

对于长度是N的一维数组a,当使用指针p指向其首元素后,即可通过指针p访问数组的各个元素。

(a[0]用*p表示,a[1]用*(p+1)表示,a[i]用*(p+i)表示)

使指针变量p指向一维数组a:p=a; p=&a[0]

例3 用指针实现一维数组的输入输出。

程序一

#include<stdio.h>
#define N 10
int main()
{
	int a[N];
	int *p=a,i; //定义时初始化
	for(i=0;i<N;i++)
		scanf("%d",p+i);
	for(i=0;i<N;i++)
		printf("%d",*(p+i));
	return 0;
}

程序二(与上个程序效果相同)

#include<stdio.h>
#define N 10
int main()
{
	int a[N];
	int *p=a,i;
	for(i=0;i<N;i++)
		scanf("%d",p++);
	p=a;             //复位
	for(i=0;i<N;i++)
		printf("%d",*p++);
	return 0;
}

程序三

#include<stdio.h>
#define N 10
int main()
{
	int a[N],*p;
	for(p=a;p<(a+N);p++) //p的初始值指向a的首元素,之后每次后移一个位置
		scanf("%d",p);
	for(p=a;p<(a+N);p++)
		printf("%d",*p);
	return 0; 
}

例4.用指针法访问数组,求得一维数组元素的最大值

#include<stdio.h>
#define N 10
int main()
{
	int a[N],i,max,*p;
	p=a;
	for(i=0;i<N;i++)
		scanf("%d",p+i);
	max=*p;           //用a[0]为max赋初值
	for(i=1;i<N;i++)
		if(max<*(p+i))
			max=*(p+i);
	printf("%d\n",max);
	return 0; 
}

指针与二维数组

设p是指针变量,若有p=a[0],对于a数组中的任何一元素a[i][j],指针一般形式:p+i*N+j (N等于列)

例5.用指针访问二维数组的方法,求二维数组元素的最大值。

#include<stdio.h>
int main()
{
	int a[3][4]={{3,17,8,11},{66,7,8,19},{12,88,7,16}};
	int *p,max;
	for(p=a[0],max=*p;p<a[0]+12;p++)
		if(*p>max)
			max=*p;
		printf("%d\n",max);
		return 0;
}

指针与字符串

使字符型指针变量指向字符串的方法:

1.char *p="ajkjkdjj";

2.char name[20],*str;

  gets(name);

  str=name;

例6.从键盘输入一个字符串,统计其中的数字字符个数。

#include<stdio.h>
#define N 100
int main()
{
	char str[N],*p;
	int count;
	gets(str);
	p=str;
	for(count=0;*p!='\0';p++)
		if(*p>='0'&&*p<='9')
			count++;
	printf("%d\n",count);
	return 0;
}

指针数组

数组元素为指针的数组,一般格式:数据类型 *数组名[数组长度]。指针数组的每个元素是指针变量,只能存储地址值。

例7.分行输出days数组指向的字符串

#include<stdio.h>
int main()
{
	int i;
	char *days[7]={"Sunday","Monday","Tuesday","Wednesday","Tursday","Friday","Saturday"};
	for(i=0;i<7;i++)
		puts(days[i]);
	return 0;
}

指针作函数的参数

简单变量指针作函数参数

例8.输入两个整数,然后按照先大后小的顺序将其输出

#include<stdio.h>
int main()
{
	void swap(int *,int *);
	int x,y;
	scanf("%d,%d",&x,&y);
	if(x<y)
		swap(&x,&y);
	printf("%d,%d\n",x,y);
	return 0;
}
void swap(int *p1,int *p2)
{
	int temp;
	temp=*p1;
	*p1=*p2;
	*p2=temp;

}

例9.用比较交换法,将一维数组的最大值移到数组的最末元素位置,交换过程用上述swap()函数实现。

#include<stdio.h>
int main()
{
	void swap(int *,int *);
	int i,a[10]={33,-12,97,3,7,18,9,51,10,9};
	for(i=0;i<9;i++)
		if(a[i]>a[i+1])
			swap(&a[i],&a[i+1]);
	for(i=0;i<10;i++)
		printf("%5d",a[i]);
	printf("\n");
	return 0;
}
void swap(int *p1,int *p2)
{
	int temp;
	temp=*p1;
	*p1=*p2;
	*p2=temp;

}

指向数组的指针作函数的参数

例10.设计求一维数组元素最大值的函数pv_max(),并在主函数中调用它求数组元素的最大值。

#include<stdio.h>
#define N 10
int main()
{
	int pv_max(int *,int);
	int a[N],i;
	for(i=0;i<N;i++)
		scanf("%d",&a[i]);
	printf("max=%d\n",pv_max(a,N));
	return 0;
}
int pv_max(int *p,int n)
{
	int i,max=*p;
	for(i=1;i<n;i++)
		if(max<*(p+i))
			max=*(p+i);
	return max;
}

字符串指针作函数参数
例11.从键盘输入一个字符串,统计其中的数字字符个数,统计数字字符串的过程用用户函数实现,要求字符串指针作函数参数。

#include<stdio.h>
#define N 100
int main(void)
{	char string[N];
	         int count_p(char *); 
  	gets(string); 
 	printf("Total: %d\n",count_p(string));
	         return 0;
}
int count_p(char *p) 
{	int count;
 	for(count=0;*p!='\0';p++)
		if(*p>='0'&&*p<='9') count++;
	return count;
} 

指针数组作函数的参数

指针数组的元素是指针变量,用指针数组能够实现一组字符串的处理。当用指针数组作函数参数时,就可设计通用的多字符串操作函数。

例13 编写能对多个字符串排序的函数,并调用该函数将一组字符串按字典顺序排序。

#include<stdio.h>
#include<string.h>
int main()
{
  void string_sort(char *[],int);
  void string_out(char *[],int);
 char *days[7]={"Sunday","Monday","Tuesday", "Wednesday", "Thursday", "Friday","Saturday"};
    string_sort(days,7);
    string_out(days,7);
 return 0; 
}
void string_out(char * string [],int n)
{  int i;
   for(i=0;i<n;i++)
      printf("%s  ", string [i]);
} 

void string_sort(char *string[],int n)
{
  char *temp;
  int i,j;
  for(i=1;i<n;i++)
  {for(j=0;j<n-i;j++)
   if(strcmp(string [j], string [j+1])>0)
   {temp= string [j];
    string [j]= string [j+1];
    string [j+1]=temp;
   }
  }
} 

指针函数

函数返回值是指针类型的函数称为指针函数

例14 编写能够查找长度最大的字符串的函数,并调用该函数求一组字符串中的最长字符串。

#include<stdio.h>
#include<string.h>
int main()
{  char *max_len(char *[],int); 
   char *p_string[4]={"Sydney2000","Beijing2008","Athens1996","Korea1992"};
   puts(max_len(p_string,4));  
   return 0;
}
char *max_len(char *string[],int n)   
{  int i,posion,max_l;
   posion=0;                
   max_l=strlen(string[0]);         
   for(i=1;i<n;i++)
      if(strlen(string[i])>max_l)
      {  max_l=strlen(string[i]);     posion=i;    }
   return(string[posion]);    
}

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值