指向指针的指针
来源:互联网 发布:java filereader 读取 编辑:程序博客网 时间:2024/06/05 14:43
首先说下指针:
指针是C语言数据类型中一种独立的数据类型:指针类型。作为C语言的精华,当定义一个指针变量时,此变量的作用就是用来存相应数据结构(变量、函数)的地址。
如:
inti; //定义整型变量
i= 50
int*p; //定义整型指针变量,p是变量名,int *是类型名
p= &i; //指针p的值是变量i的地址
注:
1. 程序会在内存某地址空间上为各变量开辟空间,一般而言,int类型占32位,4个字节,这里会为 i,p分别开辟4个字节的空间,比如i的内存首地址为6,p的内存地址首地址为20 ,那么p =&i就意味着指针变量p的值为变量i的首地址6,而*p就是首地址6中存储的的值:50。
此时:p = 6, *p= 50;
2.必须明确的是,指针变量也是变量,定义时,程序也会为它开辟一个空间,本身也是也是有个地址的。
指向指针的指针:
int **ppi; //定义一个指向指针的指针
ppi = &p; //将指针p的地址存到ppi中
注:
1. 这里程序也会为ppi开辟空间,比如首地址为40。 ppi =&p意味着ppi 的值为指针变量p的地址,即20.
2. 此时:ppi = 20, *ppi = 6(地址20中存的数据为6), **ppi = 50(地址6中存的数据为50)
3. 虽然不是很准确,但是理解时可以把指针看做地址,要注意的是,ppi指针的值表示的是它指向的内容p的地址20,而不是ppi本身指针变量的地址40
无返回值的情况下,调用函数更改指针变量,就要用到指向指针的指针:
看下面的例子:
#include<iostream>
using namespace std;
void func(int *q)
{
q = (int*)0xFFFFFFFF;
}
int main()
{
int i= 50;
int *p =&i;
func(p);
cout<<"P= "<<p<<endl;
return 0;
}
这里输出p中值是i的地址,而不是func()函数中的FFFFFFFF。
而更改如下后:
#include<iostream>
using namespace std;
void func(int **q)
{
*q = (int*)0xFFFFFFFF;
}
int main()
{
int i= 50;
int *p =&i;
func(&p);
cout<<"P= "<<p<<endl;
return 0;
}
输出则为:P = FFFFFFFF
总结:
1. 当变量作为函数的参数时,函数内修改的是形参,实参不变化;
2. 想要通过一个无返回值的函数修改主函数中变量的值,那么函数的输入就该是该变量的地址
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针 **
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- 指向指针的指针
- JAVA中float与double的区别
- http://blog.sina.com.cn/u/5688833365
- 支付宝即时到账接口,支付宝捐助本站代码
- 单例模式
- C#中的线程BeginInvoke和Invoke
- 指向指针的指针
- 对于线程和进程的理解
- 走出迷宫
- http://blog.sina.com.cn/u/5688833365
- Linux鸟哥私房菜学习笔记(五)
- 第三周 项目四 顺序表的应用1 (。。)
- 使用UIPickerView实现简单的城市选择器
- 模板匹配中差值的平方和(SSD)与互相关准则的关系
- 将富文本编辑器内的图片变成响应式