指针基础概念

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

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

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

1.什么是指针?

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

2.如何定义指针?

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

  说明

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

#include<stdio.h>
void main()
{
	int a=10,*p;
	p=&a;
	//输出的是指针p所指向的变量的地址
	printf("p=%d\n",p);
	//输出的是指针p所指向的变量的内容
	printf("p=%d\n",*p);
}

//打印结果
p=1703724
p=10
Press any key to continue
  1. 指针运算符*

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

#include<stdio.h>
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=1703716
p=1
p=1703716
Press any key to continue
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值