C语言程序 指针

本文详细阐述了C语言中指针的概念、使用方式、类型区分、指针数组和函数指针等内容,帮助开发者深入理解并熟练运用指针这一核心特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. ------<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不是空指针。

指针函数

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

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

函数指针

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值