指针
来源:互联网 发布:java大牛博客 编辑:程序博客网 时间:2024/06/01 08:33
一.指针的定义
1.定义格式:类型 *指针变量名 (int *a),指针变量只能存储地址
2.指针的作用:能够根据一个地址值,访问对应的存储空间
3.定义的时候同时赋值
int a = 10; // 定义一个整型变量int *p = &a; // 定义一个指针变量并把整型变量的地址赋值给指针变量printf("%d",*p) //取出指针指向的值
4.定义后再赋值
int a = 10;int *p;p = &a; //把地址赋值给指针变量printf("%d",*p)
5.注意
(1)定义指针变量时,*只是代表一个符号标准,一个象征,没有其他特殊含义,只表示后面变量是指针变量。
(2)指针变量需要赋值的时地址,并且是和定义时候类型一样的变量地址。
(3)访问指针变量指向的存储空间:用*指针变量,这个*的作用就是访问地址指向的存储空间,和定义的时候完全不一样。
(4)%p输出指针里面存储的地址值。
(5)类型不能乱用,int型的指针只能指向int型变量的地址。
6.清空指针操作
定义指针变量不赋值,会使指针指向一个不确定的地址。未经初始化的指针变量,不可以拿来简介访问其他存储空间。这时可以把指针清空:指针变量 = 0;或者 指针变量 = NULL;这样指针变量就不指向任何地址,不能再间接访问其他存储空间。
7.指向指针的指针:类型 **变量(第一个*和类型一起表示这个变量指向的是指针类型,第二个*则表示这个变量是指针)
8.任何类型的指针都占用8个字节的存储空间。
9.指针必须要分类型,因为(*指针变量)访问存储空间的时候是根据类型占用的字节访问指向的值的内存,如果赋值了不一样类型的地址,会访问错误内存空间。(%zd:unsigned long)
二.指针与数组
1.指向一维数组的指针:把数组名(数组名就是数组的地址,也是数组首元素的地址)赋值给指向变量,这样指针就拿到数组的地址。
指针变量---->&数组名[0] (指针指向首元素的地址)
指针变量+1---->&数组名[1] (这里面的+1不是单纯的加1,而是加上元素类型占用的字节数,所以+1其实是下一个元素的地址)
指针变量+i---->&数组名[i] (+i指的的数组第i+1个元素的地址)
2.数组元素的访问方式
int a[5];int *p;p = a; // 指针p指向数组
(1)数组名[下标]:可以访问数组元素
(2)指针变量名[下标]:也可以访问数组元素
(3)*(p+i):p+i是数组第i+1个元素的地址,前面加上*则表示访问指针指向第i+1个元素的值
3.指针变量+1,地址值究竟加多少,取决于指针的类型
三.指针与字符串
1.定义
(1)常量区:存放一些常量字符串(里面的值是不可以修改的)
(2)堆:对象
(3)栈:存放局部变量(里面的值是可以修改的)
2.定义字符串的二种方式
(1)利用数组(存放在栈里)
char a[] = "weijg";
特点:字符串里面的字符是可以修改的
使用场合:字符串的内容需要经常修改
(2)利用指针(存放在常量区)
char *a = "weijg";
特点:字符串其实是一个常量字符串,里面的字符是不可以修改的,用指针指针变量指向相同的字符串,这2个指针是指向相同的地址。
使用场合:字符串的内容不需要修改,而且这个字符串经常使用
四.返回指针的函数
1.指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的
2.返回指针的函数的一般形式为:类型名 * 函数名(参数列表):可以返回如:return "weijg"(返回字符串的地址给这个指针)
五.指向函数的指针
1.为什么指针可以指向一个函数?
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来
存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
2.指向函数的指针的定义
(1)定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...)
(2)(*指针变量名)是固定写法,代表指针变量p将来肯定是指向函数
(3)int (*p)(int ,int) (这表示指向一个(返回值类型是整型,接收2个整型参数的)函数的指针)
3.指向函数的指针的初始化
(1)函数的返回值类型 (*指针变量名)(形参1, 形参2, ...) = 函数名 (直接定义的时候就赋值一个函数名)
(2)函数的返回值类型 (*指针变量名)(形参1, 形参2, ...) ;指针变量名 = 函数名。(先定义,然后把函数名赋值给这个指针变量)
4.使用注意
由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的
指向函数的指针变量主要有两个用途:
(1)调用函数:(*指针变量名)(实参1, 实参2, ...) 或者 指针变量名(实参1, 实参2, ...)
(2)将函数作为参数在函数间传递
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- spring的p标签赋值
- win32编程中对话框处理函数最后的返回值为TRUE导致了程序异常
- 2015-4-12
- C++指针详解
- Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法
- 指针
- hdu 5058 So easy (set)
- Redis 学习第四章
- PAT: 01-复杂度2. Maximum Subsequence Sum
- 杂七杂八 - 字符串 ”最小表示法“
- R语言(3)——list
- QT 信号和槽需要注意的几点
- 给Bitmap画扇形
- Hdoj1023栈的合法出栈方式