指针
1.指针的概念
地址:操作系统的寻址空间编号,也就是操作系统给每个存储单元分配了统一编号
32bit系统范围0x0000 0000~0xffff ffff
指针就是地址
指针变量就是存在指针编号的变量
指针一般都是拿首地址(整型 int a;a占四个字节的存储单元,对应占4反个地址编号0x2000~0x2003,我们一般只研究首地址即0x2000)
注意:
1)无论什么类型地址,都是存储单元的编号,在32bit下都是4字节
2)对应的类型的指针变量,只能存放对应类型变量的地址
2.指针的定义方法
2.1简单的指针
数据类型 *指针变量名
int *p //定义一个整型类型的指针变
2.2指针的运算符
&取地址、*取值
#include <stdio.h>
int main()
{
int *p;
int a=100;
p=&a; //p为a的地址
printf("指针变量p的值为:%#p\n",p); //打印的地址
printf("指针变量p所指内容为:%d\n",*p); //对应地址所对应的值
return 0;
}
结果为:
3.指针的分类
字符指针、短整数指针、整型指针、长整型指针、float型指针、double型指针、函数指针、结构体指针、指针的指针、数组指针
#include <stdio.h>
int main()
{
char *p_char; //定义一个字符型指针变量,只能存放字符型数据的地址编写
char ch;
p_char=&ch; //指针初始化
short *p_h; //定义一个短整型指针变量,只能存放短整型数据的地址编写
short a;
p_h=&a;
int *p_i; //定义一个整型指针变量,只能存放整型数据的地址编写
int a;
p_i=&a;
long long *p_l; //定义一个长整型指针变量,只能存放长整型数据的地址编写
long long a;
p_l=&a;
float *p_f; //定义一个float型指针变量,只能存放float型数据的地址编写
float a;
p_f=&a;
double *p_d; //定义一个double型指针变量,只能存放double型数据的地址编写
double a;
p_d=&a;
return 0;
4.指针的运算
指针可以+、-意味着指针的上移或者下移
#include <stdio.h>
int main()
{
int *p;
int a[4]={1,2,3,4};
p=a;
int i;
for(i=0;i<4;i++){
printf("该位置的值为%d \n",*p);
printf("所在位置%#x\n",p);
p++;
}
return 0;
}
结果为:
习题:
输人10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写3个函数:①输人10个数;②进行处理;③输出10 个数。
#include <stdio.h>
/*1.输人10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写3个函数:①输人10个数;②进行处理;③输出10 个数。
*/
void scan(int arr[10],int a);
void deal(int arr[10],int a);
void print(int arr[10],int a);
int main()
{
int arr[10];
int *p;
p=arr;
scan(arr,10);
// print(arr,10);
deal(arr,10);
print(arr,10);
return 0;
}
void scan(int arr[10],int a)
{
int i;
printf("请输入10个数值,输入一次按一次回车:\n");
for(i=0;i<10;i++){
scanf("%d",&arr[i]);
}
}
void deal(int arr[10],int a)
{
int i,j;
int *mx,*mi;
int max=0,min=100000,temp;
for(i=0;i<10;i++){
if(max<arr[i]){
max=arr[i];
j=i;
}
}
mx=&arr[j];
printf("%d ",arr[j]);
temp=arr[9];arr[9]=*mx;*mx=temp;
printf("%d ",max);
for(i=0;i<10;i++){
if(min>arr[i]){
min=arr[i];
j=i;
}
}
mi=&arr[j];
printf("%d ",arr[j]);
temp=arr[0];arr[0]=*mi;*mi=temp;
printf("%d ",min);
}
void print(int arr[10],int a)
{
int i;
printf("arr[10] ");
for(i=0;i<a;i++){
printf("%d ",arr[i]);
}
}
结果为: