1理清指针的作用
一个变量的地址称为该变量“指针”,变量的指针就是变量的地址
存放地址的变量就是指针变量
指真是一种间接访问的方式
列:定义一个指针*p,指向a变量的地址
*p=a
p=&a
2.指针变量作为函数的参数
通过交换指针变量所指向的变量进行交换
viod swap(int *p1,int*p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
注:如果想通过函数调用得到 n 个改变的值,可以:
1.在主调函数中设 n 个变量,用 n 个指针变量指向它们;2.设计一个函数,有 n 个指针形参.在这个函数中改变这 n 个形参所指变量的值.
3.在主调函数中调用这个函数,在调用时,将这 n 个指针变量作实参,将它们的地址传给所调用的函数的形参;
4.在执行该函数的过程中,通过形参指针变量,改变它们所指向的 n 个变量的值;
5.主调函数中就可以使用这些改变了值的变量.
3.指针指引数组
数组元素的指针就是数组元素的地址
指针指引数组元素有两种
1.下表法 a[i]
2.指针法 *(a+i)
指针的运算中如p1-p2(只有p1和p2都指向同一数组才有意义)
输素出数组中的元素
(1)下标法
#include<stdio.h>
void main()
{
int a[10]; int i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=9;i>=0;i--)
printf("%d",*(a+i));
}
(2)通过数组名计算数组元素地址
printf("%d",*(a+i));
(3)用指针变量指向数组元素
#include<stdio.h>
void main()
{
int a[10];
int*p,i;
for(i=0;i<=10;i++)
scanf("%d",&a[i]);
for(p=a+9;p>=a;p--)
printf9"%d",&p);
}
4数组名作为函数的参数
用数组名作实参,在调用函数时是把数组的首地址传送给形参,形参得到该地址后也指向同一数组,即实参数组与形会数组共占同一段内存。
void f(int arr[],int n)
{
printf("%d\n",*arr);
arr=arr+3;
printf("%d",*arr);
}
5.指针指引字符串
#include<stdio.h>
void main()
{
char string="i love china";
printf("%s",string);
}
注意:字符指针string指向字符串常量,字符串常量不能改变即不能对字符串常量重新赋值
6.字符指针作为函数参数
可以用函数调用实现对字符串复制
3include<stdio.h>
void main()
{
void copy_string(char*from,char*to);
char*a="I am a teacher";
char b[]="You are a student";
char*p=b;
printf("string a=%s\n string b=%s\n",a,p);
printf("copy string to string b:\n");
copy_string(a,p);
printf("\n string a=%s\n string b=%s\n");
}
void copy_string(char*from,char*to)
{
(;*from!='\0',from++,to++)
{*to=*from}
*to='\0';
}