指针的基本知识以及八种基本运算

指针?什么是指针? 从根本上看,指针是一个值为内存地址的变量,

所以说,指针变量的值是 地址!

假设 ptr是一个指针变量名 ,可以编写如下 语句
ptr=&pooh;// 把 pooh的地址赋给ptr


说明: 对于这条语句 我们说 ptr指向 pooh. ptr 和 & pooh 的区别在于  ptr是变量 而 &pooh 是 常量


ptr = &bath  现在 把ptr 指向bah 而不是 poth






如果说 我们已经知道了 ptr 指向的地址,那么我们如何 找出该地址的储存的值呢
val = *ptr ; // 找出ptr 指向的值


介绍一下  * :间接运算符(也叫 解引用运算符) 
ptr = &bath ; val=*ptr;
这两句 相当于 一句 val=bah;


 
 
那么怎么样声明 指针呢?
 声明指针变量时必须指定指针所指向变量的类型,因为不同的变量占用不同的储存空间
 例: int *pi; // pi 是指向int 类型的指针
      char *pc;// pc是指向char 类型变量的指针
 float *pf,*pg;// 两个都是指向float 类型变量的指针
 
指针是可以在函数间 通信的:可以提高我们传递参数的速度

记住一点:在声明 函数的时候 变量使用 指针变量,在传递 参数的时候 我们要传递参数的地址


// 举个例子 : 使用指针解决交换函数的问题

#include<stdio.h>

void interchange(int * u, int * v);   //在声明 函数的时候 变量使用 指针变量

int main(void)
{
	int x = 5,y = 10;
	printf("Originally x= %d and y = %d .\n",x,y);
	interchange(&x,&y);  			//在传递 参数的时候 我们要穿参数的地址
	printf("Now x = %d and y=%d.\n",x,y);
	return 0;
}

void interchange(int *u,int *v)
{
	int temp;
	temp=*u;
	*u=*v;
	*v=temp;
}


下面再介绍一下 指针的 八种基本操作

/*
  在这里给出指针的 8中基本操作 
*/
#include<stdio.h>
int main()
{
	int urn[5]={ 100,200,300,400,500};
	
	int  *ptr1,*ptr2,*ptr3;
	
	ptr1 = urn;  // 把一个地址赋给 指针
	ptr2 = & urn[2];// 把一个地址赋给指针 
					// 解 引用指针,以及获得指针的地址
					
	printf("pointer value,dereferenced pointer, pointer address:\n");
	printf("ptr1 = %p,*ptr1 = %d, & ptr = %p\n",ptr1,*ptr2,&ptr3);
	
	// 指针加法
	ptr3=ptr1+4;
	printf("\nadding an int to a pointer:\n");
	printf("ptr1+4= %p,*(ptr1+4)=%d\n",ptr1+4,*(ptr1+4));
	
	// 递增指针
	ptr1++;
	printf("\nvalues after ptr1++:\n");
	printf("ptr1 = %p,*ptr1 =%d,&ptr1=%p\n",ptr1,*ptr1,&ptr1);
	
	// 递减指针 
	ptr2--;
	printf("\nvalues after --ptr2:\n");
	printf("ptr2 = %p,*ptr2 =%d,&ptr2=%p\n",ptr1,*ptr1,&ptr1);
	
	// 恢复为初始值 
	--ptr1;
	++ptr2;
	printf("\nPointers reset to original values:\n");
	printf("ptr1=%p,ptr2=%p\n",ptr1,ptr2);
	
	//一个指针减去另一个指针
	printf("\nsubtracting one pointer from another:\n");
	printf("ptr2 = %p,ptr1 = %p ,ptr2-ptr1 =%td\n",ptr2,ptr1,ptr2-ptr1);
	
	// 一个指针减去一个整数
	printf("\nsubtracting an int from a pointer:\n");
	printf("ptr3 = %p,ptr3-2 = %p\n",ptr3,ptr3-3) ;
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值