栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言指针

指针
  • 指针和指针变量的概念
  • 指针与一维数组
  • 指针与二维数组
  • 字符串的指针和指向字符串的指针变量
  • 动态分配内存

指针和指针变量的概念
  1. 内存地址──内存中存储单元的编号
    (1)计算机硬件系统的内存储器中,拥有大量的存储单元(容量为1字节)。
    为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单元都有一个惟一的地址。
  2. 变量地址──系统分配给变量的内存单元的起始地址
    注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。
  3. 指针与指针变量
    (1)指针──即地址
    一个变量的地址称为该变量的指针。
    (2)指针变量──专门用于存储其它变量地址的变量
    指针与指针变量的区别,就是变量值与变量的区别。
  4. 指针变量的定义
    如:
int   i , j
        int  *pointer-1 , *pointer-2;
        pointer-1=&i;
        pointer-2=&j;

定义格式:类型 *指针变量名
说明:(1)用*表示定义的变量为指针变量
(2)指针变量的类型为指针变量指向的地址单元内值的类型。

  1. 指针变量的引用
main()
{int a=3,*p;
 p=&a;
 printf(“a=%d,*P=%d”,a,*p);
 printf(“a=%x,*p=%x”,&a,p);
}

在非定义语句中出现的*p表示指针变量P所存放的地址中的内容

指针与一维数组
  1. 概念
    数组的指针──数组在内存中的起始地址;
    数组元素的指针──数组元素在内存中的起始 地址。
  2. 指向数组的指针变量的定义
    与指向普通变量的指针变量的定义方法一样。
    例如:
int  array[10], *pointer;
  pointer=array (或&array[0]);

注意:数组名代表数组在内存中的起始地址(与第1个元素的地址相同),所以可以用数组名给指针变量赋值。
3. 通过指针引用数组元素
如果有
“int array[10],pointer=array;则:
(1)pointer+i和array+i都是数组元素array[i]的地址。
(2)
(pointer+i)和*(array+i)就是数组元素array[i]。
例如,假设指针变量pointer的当前值为3000,则pointer+1为3000+1*4=3004,而不是3001。 pointer+1指向下一个数组元素地址

指针与二维数组 字符串的指针和指向字符串的指针变量 动态分配内存
  • 中定义了下面的函数
  • malloc( size);
    向系统申请大小为size的内存块,把首地址返回。如果申请不成功,返回NULL
  • free(* p);
    释放由malloc() 申请的内存块。p是指向此块的指针
#include  
main()
{int  *p ;
 p = (int *) malloc(4);    
scanf("%d",p);
printf("%d",*p);
free(p);                            
}

一般在写程序需要判断分配内存是否成功,使用如下程序语句:
if(p!=NULL)
……………………//需要执行的语句
else
……………//打印分配内存不成功出错信息

#include  
main()
{int  *p ;
 p = (int *) malloc(4);    
If(p!=null)
{scanf("%d",p);
printf("%d",*p);
free(p);}
else
printf(“没有申请到空间”);

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291482.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号