指针基础(入门)

这篇博客详细介绍了C语言中的指针概念,包括指针的定义、指针变量的声明与初始化,以及如何使用指针操作内存地址。文中通过示例说明了指针在数组元素交换中的应用,并提供了一个程序,用于输入10个整数并交换最大值与末位、最小值与首位。此外,还探讨了指针变量与不同编译器位数的关系,以及指针和普通变量在内存中的表示。
摘要由CSDN通过智能技术生成

什么是指针::  指针就是 内存地址

什么是指针变量 :  指针变量就是用来存放内存地址的变量       

怎样定义指针变量:  int  / char /double  + * +变量名    如  int  *pum   pum即为指针型变量

取地址符:&     当想用指针变量指向某一普通变量地址时,需要加&

int  a=100;
int *pum=&a;

这时pum就指向了变量a的地址

当需要引用地址中存放的内容时  需要在指针变量pum前加*

在这里要注意 地址的值用16进制表示,而当我们定义一个变量为16进制时,那么每一个数字都是四位,最小为0,最大为f,如 int  a=0x 23568af  那么这里面的2  3  a  f 等都用四位存储,不满的填0,所以一个地址也就是一个字节最多存两个16进制的数字,另外补充一点,char类型的字符,每个字符都是一个字节,需要一个地址来存

*定义指针变量类型时编译器位数影响最大字节数

编译器64位时

 编译器32位时

* 但是普通变量不会受编译器影响最大字节数

64位编译器时

 32位编译器时

指针变量的初始化

int array[5]={1,2,3,4,5};

int*pum=array;          //第一种初始化,将函数名赋给pum,那pum将初始化为array[0]的地址

int *pum=&array[4];     //第二种初始化,指定pum指向array[4]的地址,但注意要加&

当指针初始化为越界数组时那么会成为野指针,比如5个元素的数组,将指针变量初始化为第八个元素的地址,那么这时候会有地址,但地址存的内容是不确定的

*p(x++)和*px++的区别

*p(x++)是先x++后再取(x+1)的内容;

*px++是先取x的内容再进行x+1;

在用指针进行数组元素的互换时,一定记得是地址的内容间的更换而不是地址的更换,因为地址被开辟后就固定了,是无法更改的

习题

#include <stdio.h>
/*
输入十个整数,将最大值和最后一位互换,最小值与第一位互换(用指针和函数)
*/

void swap(int array[]);
void input(int array[]);
int main()
{	
	int i;
	printf("请输入10个整数\n");
	int array[10]={0};
	input(array);
	for(i=0;i<10;i++)
		printf("%d  ", array[i]);
	printf("\n");
	swap(array);
	for(i=0;i<10;i++)
		printf("%d  ", array[i]);
	return 0;
}
void input(int array[])
{
	int i;
	for(i=0;i<10;i++)
	{
		printf("请输入第%d个数\n", i+1);
		scanf("%d", &array[i]);
	}	
}

void swap(int array[])
{
	int max=0,min=100,min_i=0,max_i=0, i;
	int *p,*pmx,*pmi;
	int temp;
	for(i=0;i<9;i++)
		{
			if(min>array[i])
			{
				min=array[i];
				min_i=i;
			}
		}
		for(i=0;i<9;i++)
		{
			if(max<array[i])
			{
				max=array[i];
				max_i=i;
			}
		}
	p=array;
	pmi=&array[min_i];
	temp=*pmi;
	*pmi=*p;
	*p=temp;
	
	
	p=&array[9];
	pmx=&array[max_i];
	temp=*pmx;
	*pmx=*p;
	*p=temp;		
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值