指针基础概念及简单应用

指针

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]);
}
}

 结果为:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值