6.1 指针的认识

指针=地址

指针变量:存放地址的变量。

指针变量的定义(声明):*的标识作用只产生在指针变量的定义或声明的时候。

指针变量的访问:地址;变量名

int *p;

取值运算符*:把内存地址中的数据取出来。

printf("地址访问a:%d\n",*(&a))
#include 
int main()
{
	int a = 0x1234;
	int *p = &a;
	char *c ;
	c=&a;
	
	printf("p=%p\n",p);
	printf("c=%p\n",c);
	
	printf("a= %x\n",*p);
	printf("a=%x\n",*c);
	return 0;
}

 

*运算符会根据指针大小类型,访问不同的内存空间。

int *p为整型会访问完整的4个字节32位;而char *c是1个字节占8位,只能访问前面8位节点,剩下的24位全部被忽略。

指针区分类型:

①决定指向空间的大小:不同类型 int,char……不同类型占用空间不同。

②决定增量:不同类型数据,访问内存中的值时跨度不同。所以定义指针时要求变量一致。

 为什么要用指针:

①利用指针间接访问数值,实现两个数的交换:

#include 
void changeData(int *pdata1,int *pdata2){    //取地址的值交换数值
	int temp;
	temp = *pdata1;
	*pdata1 = *pdata2;
	*pdata2 = temp;
	
	
}


int main()
{
	int data1 = 10;
	int data2 = 20;
	
	printf("交换前:data1 = %d,data2=%d\n",data1,data2);
	
	changeData(&data1,&data2);  //传递数据地址
	printf("交换后:data1 = %d,data2=%d\n",data1,data2);
	return 0;
}

②指针指向固定的区域:

#include 
int main(){
	int a = 10;
	printf("adress of a is 0x%p\n",&a);
	int *p =(int *)0x000000000061FE2D;        //指定p的空间地址为0x000000000061FE2D
	
	printf("p = 0x%p\n",p);
	return 0;
}

输入三个数a,b,c,不管怎么输入都是a,b,c三个数从大到小顺序输出:

#include 
int sortFromLagrest(int *a,int *b ,int *c){
	int temp;
	if(*a<*b){
		temp = *a;
		*a = *b;
		*b = temp;
	}
	if(*a<*c){
		temp = *a;
		*a = *c;
		*c = temp;
	}
	if(*b<*c){
		temp = *b;
		*b = *c;
		*c = temp;
	}
	
}


int main(){
	int a;
	int b;
	int c;
	puts("请输入三个数a,b,c:");
	scanf("%d%d%d",&a,&b,&c);
	sortFromLagrest(&a,&b,&c);
	printf("a的值为:%d,b的值为:%d,c的值为:%d",a,b,c);
	return 0;
	
}

你可能感兴趣的:(C语言,c语言)