一、指针的基本概念
1.&取值运算符的功能是取得对象的地址,表示对象的转换说明的为%p,p是pointer的首字母
2.当指针p的值为对象x的地址时,一般说“p指向x”,将取值运算符&写在Type型对象x前得到的&x为Type*型指针,其值为x的地址。
3.指针运算符*,*a即a指向的对象,当p指向x时,*p就是x的别名
什么也不指向的特殊指针是空指针,表示空指针的对象式宏NULL是空指针常量。
二、指针与函数
如果要在函数中改变变量的值,就需要传入指向该变量的指针,在指针前写上指针运算符*来访问该指针指向的对象,称为解引用。
将指向对象的指针作为形参,并在指针前写上*,就可以访问该对象本身。
#include<stdio.h>
void sum_diff(int a,int b,int *sum,int *diff)
{
*sum=a+b;
*diff=(a>b)?a-b:b-a;
}
void swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
int main()
{
int a,b,s=0,d=0;
scanf("%d %d",&a,&b);
sum_diff(a,b,&s,&d);//调用函数计算和与差//
printf("两数之和为%d,两数之差为%d\n",s,d);
swap(&a,&b);//调用函数交换数值//
printf("%d %d",a,b);
return 0;
}
三、指针和数组
1.数组名原则上会被解释为指向该数组起始元素的指针
2.指针p指向数组中的元素e时
p+i为指向元素e后的第i个元素的指针,指向元素e后第i个元素的*(p+i)可以写成p【i】
p-i为指向元素e前的第i个元素的指针,指向元素e前第i个元素的*(p-i)可以写成p【-i】
3.指针p指向数组a的起始元素时a【0】时
a【i】,i【a】,*(a+i),*(i+a),p【i】,i【p】,*(p+i),*(i+p)表示的都是相同元素
即Type*型指针p指向Type型数组a的起始元素a【0】时,指针p的行为就和数组本身一样
4.函数间数组的传递是以指向第一个元素的指针的形式进行的。
5.数组名不能作为赋值运算符的左操作数
#include<stdio.h>
void swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
void bsort(int a[],int n)//冒泡排序进行升序//
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j]<a[j-1])
swap(&a[j],&a[j-1]);
}
}
}
int main()
{
int score[1000];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&score[i]);
}
bsort(score,n);
for(i=0;i<n;i++)
{
printf("%d\n",score[i]);
}
return 0;
}