指针的简单介绍:
/**
目的:指针的定义及简单介绍
时间:2015年7月15日10:43:50
*/
#include <stdio.h>
int main(void)
{
int i = 3;
int j;
int * p; //p是变量的名字,int * 表示的是p只能存放int * 类型的变量的地址
// error cannot convert from 'int' to 'int *' 因为p只能存放int类型变量的地址,而不能存放int类型变量的值
// p = i;
//p = 55;//error
p = &i;
/*
p保存了i的地址,因此p指向i
p不是i,i也不是p,也就是说,修改p的值不影响i的值,修改i的值也不影响p的值。
如果一个指针变量指向某个普通变量,则 *指针变量 就完全等同于 普通变量。
例子:如果p是个指针变量,并且p存放了普通变量i 的地址。
则: p指向了普通变量 i
*p 就完全等同于 i ,或者说,在所有*p出现的地方都可以替换成 i ,当然多有出现 i 的地方都可以替换成 *p
*p就是以p的内容为地址的变量。
*/
j = *p;
printf("i = %d
", i);
printf("j = %d
", j);
printf("p = %d
", *p);
printf("p的地址为:%d
", p);
return 0;
}
/**
在VC++6.0中运行结果为:
-------------------------
i = 3
j = 3
p = 3
p的地址为:1638212
Press any key to continue
-------------------------
*/
指针和指针变量定义和区别:
1、指针就是地址,地址就是指针,指针就是一个地址值,地址就是内存单元的编号
2、指针变量是存放地址的变量。
2、指针和指针变量是两个不同的概念。
注意:通常我们会把指针变量简称为指针,实际它们的含义不一样。
指针的重要性:
1、表示一些复杂的数据结构。
2、快速的传递数据。
3、使函数返回一个以上的值(即返回多个值)
4、能直接访问硬件(获取变量地址)
5、能方便的处理字符串
6、是面向对象中引用的基础
总结:指针是C语言的灵魂
指针的定义
地址:
内存单元的编号
从零开始的非负整数
范围:4G [0——4G-1]
指针:
1、指针就是地址,地址就是指针,指针就是一个地址值,地址就是内存单元的编号
2、指针变量是存放地址的变量。
2、指针和指针变量是两个不同的概念。
注意:通常我们会把指针变量简称为指针,实际它们的含义不一样。
指针的本事就是一个操作受限的非负整数。(指针不能进行加、不能进行乘、不能进行除。只能进行相减)
指针的分类:
1、基本类型指针
int * p; //p是变量的名字,int * 表示的是p只能存放int * 类型的变量的地址 p只能存放int类型变量的地址,而不能存放int类型变量的值
/*
p保存了i的地址,因此p指向i
p不是i,i也不是p,也就是说,修改p的值不影响i的值,修改i的值也不影响p的值。
如果一个指针变量指向某个普通变量,则 *指针变量 就完全等同于 普通变量。
例子:如果p是个指针变量,并且p存放了普通变量i 的地址。
则: p指向了普通变量 i
*p 就完全等同于 i ,或者说,在所有*p出现的地方都可以替换成 i ,当然多有出现 i 的地方都可以替换成 *p
*p就是以p的内容为地址的变量。
*/
2附录:
*的含义
1、函数
2、定义指针变量 int *p;
//定义一个名字叫做p的变量,int * 表示p只能存放int变量类型的地址。
3、指针运算符
该运算符放在已经定义好的指针变量的前面,
如果p是一个定义好的指针变量,则*p表示以p的内容为地址的变量。
如果通过被掉函数修改主函数普通变量的值,
1、 实参必须为该普通变量的地址
2、 形参必须为指针变量
3、 在被掉函数中通过 *形参名 = …………的方式就可以修改主调函数变量的值。
2、指针和数组
指针和一维数组
一维数组名
一维数组名是个指针常量,它存放的是一维数组第一个元素的地址。
下标和指针的关系
如果P是指针变量,p[i]永远等价于*(p+i)
指针确定一个一维数组函数需要两个参数:数组名,数组长度。
指针变量的运算
指针变量不能相加,不能相乘,不能相除。
如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量可以相减
一个指针变量到底占几个字节
预备知识:
sizeof(数据类型)
功能:返回值就是你该数据类型所占的字节数。
例子:sizeof(int) = 4 sizeof(double) = 8 sizeof(char) =1
sizeof(变量名)
功能:返回值就是该变量所占字节数。
p q r 是指针变量
假设p指向char类型变量char *p = &ch;
假设q指向int类型变量 int *q = &i;
假设r指向double类型变量double *r = &j;
p q r本身所占字节是否一样?
结论:一个指针变量,无论它指向的变量占几个字节,该指针变量只占四个字节。
#include <stdio.h>
int main(void)
{
char ch = 'A';
int i = 2;
double j = 3.3;
char *p = &ch;
int *q = &i;
double *r = &j;
//一个字节有一个编号,指针变量存储的是该变量的第一个字节所//对应的编号, 根据编号类型,判断变量类型
printf("%d %d %d ",sizeof(p),sizeof(q),sizeof(r));
return 0;
}
/**
在VC++6.0中运行结果为:
---------------------------
4 4 4
Press any key to continue
结论:一个指针变量,无论它指向的变量占几个字节,该指针变量只占四个字节。
*/
3、指针和函数
4、指针和结构体
5、多级指针