C语言第六课:指针(上)

C语言指针这一部分很长,也很繁琐,最重要的一点就是要明白指针是怎么用的,当然,如果能够知道其中的原理那就太棒了。

一、指针变量与普通变量

关于指针变量与普通变量,初学者只要知道以下的两点就可以了:

  1. 指针=&变量
  2. *指针=指针指定的变量的值

前者是将指针和某一变量相关联,当我们用指针与某一变量相关联好后,就可以用*指针来代表该指针所关联的变量的那个值 

举个例子:

int *p,a=5;
p=&a;
int *q,b=10;
q=&b;
int c,d;
c=*p+1;
d=*q+2;

以上代码块的意思:

p指向a这个变量,q指向b这个变量。指针已经指向某一个变量后,我们用*指针就能代表一个值了。比如上面的*p:就相当于p指向的变量a的值,也就是5。同理*q就是10。

c等于指针p指向的值加1,也就是6。d就等于q指向的值加2,也就是12。

同时,指针的指向也是可以改变的。比如,看如下代码:

int *p,a=5;
p=&a;
int *q,b=10;
q=&b;
int *r;
r=p;
p=q;
q=r;

我们定义了一个新的指针变量r,并且让r的指向等于p的指向,p原来的指向是a,所以r的指向也是a。同理,p的指向变成了b,q的指向变成了a。通过最后四行代码可以使它们的指向互换。

当然,上面所说的*p、*q除了能表示一个值以外,还能起到赋值的作用。比如(我们在以上代码的基础上加上后面两行):

int *p,a=5;
p=&a;
int *q,b=10;
q=&b;
int *r;
r=p;
p=q;
q=r;
*p=99;
*q=100;

因为*p指的是指针p所对应的变量的值,所以b的值就不是10了,而是99。同理,因为*q指的是q指向的那个变量a,所以a的值变成了100。

总结一下:

  1. 我们要使用指针之前,首先要给它定型;指针的类型取决于它关联的变量,如果它关联的变量是整数型,那这个指针就是整数型;如果它关联的变量是字符型,那指针就是字符型。
  2. 定义完一个指针后,一定要将指针与某一个变量相关联,关联的方法就是:指针=&变量(p=&a)
  3. 然后,指针的指向是可以改变的。如果要让指针的指向互换,只需定义一个新的指针。然后执行上面代码块的倒数第三、四、五行代码(r=p;p=q;q=r)。
  4. 最后,在指针的前面加上一个*号,就代表指针所指向的那个变量的值。这个*号指针的值(如*p),可以当成某一个数参与某一个计算,也可以通过对它赋值的方式,影响它指向那个变量本身的值。

明白这些以后,我们尝试做一道题:

输入两个整数,按先大后小的顺序输出这两个数。请用指针来编程。

解法1:

#include<stdio.h>

int main()
{
	int a,b,*p,*q,*r;
	printf("请输入两个整数:\n");
	scanf("%d,%d",&a,&b);
	p=&a;
	q=&b;
	if(a<b)
	{
		r=p;
		p=q;
		q=r;
	}
	printf("较大数位%d,较小数位%d。\n",*p,*q);
	
	return 0;
} 

解法2:

#include<stdio.h>

int main()
{
	int a,b,*p,*q,t;
	printf("请输入两个整数:\n");
	scanf("%d,%d",&a,&b);
	p=&a;
	q=&b;
	if(a<b)
	{
		t=*p;
		*p=*q;
		*q=t;
	}
	printf("较大数位%d,较小数位%d。\n",a,b);
	
	return 0;
}
发布了13 篇原创文章 · 获赞 15 · 访问量 2166

猜你喜欢

转载自blog.csdn.net/weixin_44337241/article/details/104282851
今日推荐