博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针基础概念
阅读量:3950 次
发布时间:2019-05-24

本文共 1767 字,大约阅读时间需要 5 分钟。

  虽然现在工作使用的是java编程语言,但是学过C语言的都知道java的许多语言特性从C的高级版本C++那里进行沿用和发展。那两者之间到底有何区别呢?

  指针是c语言最大的优点,它可以使用户几乎可以访问计算机的所有内存资源和其他部分资源(就是指那里打拿里)。JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了C语言中指针操作失误造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。

  前面说到这么多,到底指针是个什么东西?

1.什么是指针?

  指针是C语言中的一种数据类型,存放的是数据的内存单元地址。

  计算机系统的内存拥有大量的存储单元(每个存储单元的大小为1字节),为了便于管理,必须为每个存储单元编号,改编号就是存储单元的“地址”。每个存储单元拥有一个唯一的地址。
  指针变量除了可以存放变量的地址外,还可以存放其他数据的地址,例如可以存放数组和函数的地址。

2.如何定义指针?

  指针的定义格式

          数据类型 *指针变量名;
  指针的初始化
          指针变量名=初始化地址值

  说明

  1. " * "表示定义的是一个指针变量。指针变量的前面必须有" * "
  2. "初始值地址"一般都是&变量名称&数组变量名称&数组元素,注意:这些变量名称必须要是已经定义过的,定义过了之后才能使用。
  3. 数据类型符指的是定义的指针变量所指向的变量的数据类型,可以是任何基本数据类型,也可以是其他数据类型。
  4. 在定义指针变量的同时也可以定义其他的普通的变量或数组等。
举个栗子:#inlude
void main(){
int a,*p; a=10; p=&a; printf("p=%d\n",*p);}
  1. 定义指针变量的时候,可以只给部分的指针变量赋初始值。
  2. 指针变量的初始化,除了可以是已定义变量的地址,也可以是已初始化的同类型的指针变量,也可以是NULL(空指针,C中对于NULL大小写敏感,null和NULL不一样)。
#include
void main(){
int a=10,*p=NULL; p=&a; printf("p=%d\n",*p);}
  1. 指针变量初始化的时候,指针变量的“数据类型符号”必须与其“初始地址值”中保存的数据的类型相同。

3.指针运算符(*)符号和取地址运算符(&)

  1. 指针运算符*
       指针运算符“ * ”的作用是取指针变量所指向的地址中的内容,与地址运算符“ & ”是相逆的,它是单目运算符号。指针运算符的作用对象必须是地址,可以是已赋值的指针变量,也可以是变量或数组元素的地址。
eg1:#include
void main(){
int a=10,*p; p=&a; //输出的是指针p所指向的变量的地址 printf("p=%d\n",p); //输出的是指针p所指向的变量的内容 printf("p=%d\n",*p);}//打印结果p=1703724p=10Press any key to continue
  1. 指针运算符*

   取地址运算符“ & ”的作用就是取变量的地址,是单目运算符。其作用对象为已经定义的变量或数组元素,但是不能为数组名(int *p,a[10];p=&a这种形式是错误的,可以将p=&a修改为p=&a[1]的形式)。取地址运算符的运算结果是得到一个变量的地址。

#include
void main(){
int a[]={
1,2,3},*p; //打印a[0]的地址 printf("a[0] address=%d\n",&a[0]); //将a[0]的地址赋值给p p=&a[0]; //打印p指针变量的内容 printf("p=%d\n",*p); //打印p指针变量此时所指向的地址,应该和前面a[0]的地址一致 printf("p=%d\n",p);}//打印结果:a[0] address=1703716p=1p=1703716Press any key to continue

转载地址:http://nphwi.baihongyu.com/

你可能感兴趣的文章
Algorithm: k-nearest neighbors and decison boundary(Cross Validation)
查看>>
Algorithm: Principle Component Analysis for High Dimension Reduction Data
查看>>
Naive Bayesian for Text Classification (MLE, Gaussian Naive Bayesian)
查看>>
Algorithm: Decision Tree, Entropy, Information Gain and Continues features
查看>>
FastDFS 架构分析
查看>>
Windows 应用生成MiniDump文件的方法笔记
查看>>
安装FastDFS单机版环境
查看>>
动态规划-背包问题
查看>>
Windows10 + Nodejs调用C++语言Dll
查看>>
CSAPP - 一个简单的Shell
查看>>
《算法4》 Windows/Mac环境下使用Visual Studio Code和Orcale JDK1.8开发环境搭建
查看>>
精心整理很实用的前端笔记,看完你就在css上有很深的造诣了!!!
查看>>
前端开发在工作中用到的工具、软件、库.......------Sesiid
查看>>
正则表达式~~~很全的------Sestid
查看>>
在HTML中嵌入百度地图------Sestid
查看>>
Js或jQuery图片层叠轮播------Sestid
查看>>
js或jQuery实现返回顶部功能------Sestid
查看>>
JS实现拖拽效果------Sestid
查看>>
jQuery实现倒计时秒杀效果------Sestid
查看>>
jQuery实现html网页顶部自适应导航栏(media)------Sestid
查看>>