外行小白的IT成长之路(二)

  • 1、指针概念
  • 2、指针的运算
  • 3、指针与数组
  • 4、void指针

指针概念

简单来说指针是变量的地址,在程序运行的时候直接调用函数或者变量的名称不太方便,而调用这个函数或者变量的地址,对地址指向的函数或者变量进行操作能取到意想不到的效果。这也正是指针的意义。
C\C++中指针的定义: 类型名称 *指针名称
例如:

int *p;
char *pc;

使用指针的某些时候能够做到不用指针的事,比如调用函数交换两个变量的值。

void swap( int p,int q)
{
     int nTmp=*p;
     *p=*q;
     *q=nTmp;
}

指针运算

指针代表的是变量的地址,其中也可以进行运算。
1、两个同类型的指针变量可以比较大小;
比较大小的意思就是判断这两个指针指向的变量的地址的大小。
2、两个同类型的指针变量可以进行相减;
p1-p2=(地址1-地址2)/sizeof(T);
3、指针变量可以和整数类型的变量/常量相加减。
表达式 p+n 代表了地址p+n×sizeof(T)
4、指针变量可以自增自减。

指针与数组

T array[5];
中array的类型就是T* ,代表了array[5]这个数组的地址
T *p=array;
array[i] 与 *(p+i) p[i]等价
下面的算法是冒泡排序法。

#include<string.h>
#include<stdio.h>
#define NUM 10
void BubbleSort(int *pa,int num)
{
	for(int i=num-1;i>0;i--)
		for(int j=0;j<i;j++)
			if(pa[j]>pa[j+1])
			{
				int t=pa[j+1];
				pa[j+1]=pa[j];
				pa[j]=t;
			}
}
void main()
{
	int an[NUM];
	for(int i=0;i<NUM;i++)
	{
		scanf("%d",&an[i]);
	}
	BubbleSort(an,NUM);
	for(int i=0;i<NUM;i++)
	{
		printf("%d\n",an[i]);
	}
}

void指针

void的意思就是“无类型”,void指针则为“无类型指针”,void指针可以指向任何类型的数据。
所以void指针一般被称为通用指针或者泛指针,或者叫做万能指针
void指针一般用来内存的复制。
比如 memcpy(pa,pb,6) 将pb的前六个字节赋值给pa

void *memcpy(void *dest,const void *src,unsigned int n)     

一般来说,void * 类型的指针可以指向任何一个类型的指针。如果打算去获取它所指向的变量值时候,需要先将void指针强制类型转换成和变量名类型相匹配的数据类型指针后再进行操作;

void *dest;
char  *pDest=(char *)dest;

但是只是赋予void*类型指针指向变量值 的时候,就直接操作就可以了。

void *dest;
char  *pDest='C';
*dest=*pDest;

猜你喜欢

转载自blog.csdn.net/weixin_43408509/article/details/83213669