您的位置:首页 > 编程语言 > C语言/C++

C语言程序 指针

2015-07-28 22:31 621 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

指针概念

根据内存单元的编号或地址找到所需的内存单元,通常把这个地址叫做指针,内存地址也叫指针。

指针是C语言中最重要的内容之一:“无指针,不自由”。

使用指针的好处:为函数提供修改调用变量的灵活手段,让函数有多个返回值,使用指针传递地址,既提高了传输速度,又节省了大量的内存。

在C语言中,允许用一个变量来存放指针,这种变量称为“指针变量”。故指针变量的值是某个内存单元的地址。

指针使用格式:  类型说明符 *变量名;

其中*表示这是一个指针变量,变量的值只能存放地址。

指针变量的初始化:

1)定义的同时进行初始化

int a = 5;

int *p =&a;

2)先定义后初始化

int a;

int *p;

p=&a;

指针变量不能被赋值一个整数值(因为不知道这个整数的内存地址),被赋值的指针前不能加“*”说明符。

注意点:多个指针可以指向同一个变量,指针的指向是可以改变的,指针没有初始化里面是一个垃圾数,也称为野指针。

野指针可能会导致程序崩溃或访问不该访问的东西。

指针原理:有若干个1个字节的内存单元组成,每个内存单元都有唯一的一个地址。

二级指针:如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针即二级指针。

指针为什么区分类型?

虽然所有的指针都占8个字节,但不同类型的变量占不同的字节数,如果定义指针变量不定义类型,那在它取其中的值时,不知道应该读取几个字节。

数组指针:实质上是指针,所谓数组指针就是数组元素的地址

如:

逆序数组
#include <stdio.h>
int main(int argc,const char *argv[])
{
int a[]={1,2,3,4,5,6,7,8,9};
int *p=a;
int i=0,j=8,temp;
while(i<j)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
i++;
j--;
}
for(int i=0;i<9;i++)
{
printf("%d",*(p+i));
}
printf("\n");
return 0;
}指针数组:数组元素为指针的数组
使用格式:类型说明符 *数组名[数组长度]

int a[3]={1,2,3};

int *p[3]={a[0],a[1],a[2]};

指针变量之间的运算:

1)两指针变量的减法运算

两个指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。

实际上是两个指针变量相减之差再除以该数组元素的长度:

int *p;

int i;

i==((p+i)-p)/sizeof(int);

两个指针变量的关系运算

指向同一数组的两指针变量进行关系运算可表示他们所指数组元素之间的关系

int *p;

int *p1;

p>p1;

返回值为0或1

0       p==p1    表示p和p1指向同一元素

0       p<p1       表示p指向的元素位于低地址

1       p>p1       表示p指向的元素位于高地址

指针变量还可以与0进行比较,设p为指针变量,则p==0表明p是空指针,它不指向任何变量;p!=0表示p不是空指针。

指针函数

函数的返回值为指针的函数称为指针函数

使用格式:类型说明符 * 函数名(形参表){   函数体}

函数指针

指向函数的指针变量称为函数指针

使用格式:  类型说明符 (*指针变量名)();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: