#jitoa#[指针] 原创

正在长高
发布于 2024-1-7 16:48
浏览
0收藏

本博客由金陵科技学院-开放原子开源社顾爱萍编写

指针的定义

  1. 在C语言中把专门用来存放变量地址的变量称为“指针变量 ,简称为指针。
    如果一个指针变量的值是另一个变量的地址,就称该指针变量指向那个变量。
  2. 定义指针变量的一般形式为:
    类型名 *指针变量名
    例如:int *p;

指针的使用

指针的运算

  1. 取地址运算和间接访问运算
    单目运算符&用于给出变量的地址。例如:
    int p,a=3; p=&a;
    将整型变量a的地址赋给整型指针p,使指针p指向变量a。也就是说,用运算符取变量a的地址,并将这个
    地址值作为指针p的值,使指针p指向变量a。
    在程序中, * 除了被用于定义指针变量外,还被用于访问指针所指向的变量,它也称为间接访问运算符。
    例如,当p指向a时,p和a访问同一个存储单元,p的值就是a的值。(即p=3)
    表达式
    p= * p+1、++ p和( p)++,
    都是将指针p所指向变量的值加1。
    而表达式
    p++等价于
    (p++),先取
    p的值作为表达式的值,再将指针p的值加1,运算后,p不再指向变量
    a。
    在下例中:int a=3;
    int x,*p;
    p=&a;
    x=*p++;
    指针p先指向a,接着把p所指向的变量a的值赋值给变量x,最后修改指针p的值,即此时指针p不再指向a;
  2. 赋值运算
    int a=3;
    int *p1,*p2;
    p1=&a;//让指针p1指向a;
    p2=p1;//让指针p2指向指向指针p1所指向的地方,即p2指向a;
  3. 指针变量的初始化
    C语言变量在引用前必须先定义并赋值。指针变量在定义后也要先赋值再引用。
    int m;
    int *p;
    p=&m;

指针与函数

地址传递:
下面是一个简单的交换函数:
#include<stdio.h>

void swap(int *px,int *py)
{
int t;
t=*px;
*px=*py;
*py=t;
}
int main()
{
int a,b;
int x,y;
scanf(“%d %d”,&a,&b);
x=&a;
y=&b;
swap(x,y);
printf(“a=%d,b=%d”,a,b);
return 0;
}
在函数swap()被调用时,将实参x和y的值传递给形参px和py,所以px和py中分别存放了a和b的地址,即px指向a,py指向b,由于
px和a代表同一个存储单元,只要在函数中改变
px的值,就改变了改储存单元的内容,即a的值变化,同理b的值也发生变化。

指针与数组

在很多方面数组和指针都能处理同样的问题,例:
求输入的n(n<100)个整数的和

#jitoa#[指针]-鸿蒙开发者社区
#jitoa#[指针]-鸿蒙开发者社区
但指针与数组有本质区别,数组a是常量,而指针是变量;

指针数组与数组指针

指针数组:元素是地址(指针);
定义:例:int *p[5];
数组指针:指向一级地址(可指向一维数组),不能指向某个元素;
定义:例:int (*p)[5];

用指针实现内存动态分配

动态内存函数(定义在stdlib.h里)
动态储存分配函数 malloc()
函数原型:void malloc(unsigned size)
功能:在内存的动态存储区中分配一连续空间,其长度为size。若申请成功,则返回指向所分配内存空间的起始地址的指针;若申请内存空间不成功,则返回NULL(值为0) malloc()的返回值为(void
)类型(这是通用指针的一个重要用途)。在具体使用中,将 malloc()的返回值转换为特定指针类型,赋给一个指针。
调用该函数时,应利用sizeof计算存储块大小,不可直接写数值。
此外,每次动态分配都必须检查是否成功。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
已于2024-1-7 16:48:09修改
收藏
回复
举报
回复
    相关推荐