C语言-指针

本文介绍了C语言中的指针概念,包括取值和取址操作符,变量的指针和指针变量的使用,以及指针与数组、多维数组、字符串之间的关系。还讨论了字符数组初始化、指向函数的指针、指针相减的计算方法,以及void和const指针的应用。
摘要由CSDN通过智能技术生成

取值操作符*;取址操作符&;

int i=2000;
int *pointer;//定义指针
pointer=&i;//取址
printf("%d\n",*pointer);//取值

变量的指针:是变量的地址;用于存放变量地址的变量是:*指针变量;指针变量只能存放地址,地址运算符&表示变量的地址;

/*通过指针变量访问整型变量*/
#include<stdio.h>
void main()
{
	int a,b;//变量
	int *pointer_1,*pointer_2;//指针变量
	a=100;b=10;//变量赋值
	pointer_1=&a;//指针变量附地址
	pointer_2=&b;

	printf("%d,%d\n",a,b);
	printf("%d,%d\n",*pointer_1,*pointer_2);//指针变量的取值操作符
	//间接取值
}

执行pointer_1=&a;后:

&*pointer_1(右结合)==&a;

(*pointer_1)++==a++;括号是必要的,++与*优先级别同;

#include<stdio.h>
void main()
{
	int *p1,*p2,*p,a,b;
	
	scanf("%d,%d",&a,&b);
	p1=&a;//p1指针
	p2=&b;//p2指针

	if(a<b)
	{
		p=p1;
		p1=p2;
		p2=p;
	}//p1指向b,p2指向a
	
	printf("a=%d,b=%d\n",a,b);
	printf("max=%d,min=%d\n",*p1,*p2);
}
#include<stdio.h>

void swap(int *p1,int *p2);
void main()
{
	int a,b;
	int *pointer_1,*pointer_2;
	
	scanf("%d,%d",&a,&b);
	pointer_1=&a;//p1指针
	pointer_2=&b;//p2指针

	if(a<b)
	{
		swap(pointer_1,pointer_2);
	}
	printf("\n%d>%d\n",a,b);
}
void swap(int *p1,int *p2)
{
	int temp;
	printf("I'm swapping...\nPlease wait~\n");
	temp=*p1;//temp=a;
	*p1=*p2;//a=b;
	*p2=temp;//b=temp;

}
/*abc按从大到小输出*/
#include <stdio.h>

void main()//主函数
{
	void exchange(int *q1,int *q2,int *q3);
	int a,b,c,*p1,*p2,*p3;

	scanf("%d %d %d",&a,&b,&c);
	p1=&a;p2=&b,p3=&c;

	exchange(p1,p2,p3);
	printf("%d %d %d\n",a,b,c);
}



void exchange(int *q1,int *q2,int *q3)//排序
{
	void swap(int *qt1,int *qt2);//注意swap定义在此,编译器从上到下
	if(*q1<*q2)
	{
		swap(q1,q2);
	}
	if(*q1<*q3)
	{
		swap(q1,q3);
	}
	if(*q2<*q3)
	{
		swap(q2,q3);
	}

}

void swap(int *pt1,int *pt2)//交换
{
	int temp;

	temp=*pt1;
	*pt1=*pt2;
	*pt2=temp;
}

数组和指针:p=a同于p=&a[0]

/*输入数组的全部元素*/

#include<stdio.h>
void main()
{
	int *p;//定义指针
	int i;
	int a[10];
	//a是数组的首地址,*a是a[0]的值,i表示地址的偏移
	//int类型,1个单元4个字节位置

	for(i=0;i<10;i++)
	{
		scanf("%d",&a[i]);
	}
	printf("\n");
	
	//for(i=0;i<10;i++)
	//{
		//printf("%d",a[i]);/*1.下标法*/
		//printf("%d",*(a+i));/*2.通过数组名计算数组地址,找出元素的值*/

	//}

	for(p=a;p<(a+10);p++)/*3.用指针变量指向数组元素*/
	{
		printf("%d",*p);
	}
}

f (int arr[ ], int n)等价f (int *arr, int n)

#include<stdio.h>
//void reverse(int x[],int n);
void reverse(int *x,int n);
void main()
{
	int i,a[10]={3,7,9,11,0,6,7,5,4,2};
	printf("the original array:\n");
	for(i=0;i<10;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	
	reverse(a,10);
	
	printf("the array has been inverted:\n");
	for(i=0;i<10;i++)
	{
		printf("%d ",a[i]);
	}
}
#if(0)
void reverse(int x[],int n)
{
	int temp,i,j,m;
	m=(n-1)/2;
	for(i=0;i<=m;i++)
	{
		j=n-1-i;
		temp=x[i];x[i]=x[j];x[j]=temp;
	}
}
#endif
void reverse(int *x,int n)
{
	int *p,temp,*i,*j,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值