指针
2015-09-03 17:14
169 查看
一、指针是什么?
指针是一个变量,该变量的值是另一个变量的地址
指针变量p的值就是变量a的地址。
二 指针类型
指针所指向变量的类型就是指针的类型
例2,有三个不同的变量:请问右边的三个运算有何不同
int A,*PI=&A; PI++; 地址增加两个字节
Char B,*PC =&B; PC++; 地址增加一个字节
Float C,*PF=&C; PF++; 地址增加两个字节
指针的三个要素
1、指针指向的地址(其实就是指针的值)
2、指针指向的地址上的内容
3、指针本身的地址(其实就是指向指针的指针的值)
例 int A , *PA, **PPA;
PA=&A;
PPA=&PA;
则 **PPA=*PA=A;
*PPA=PA=&A;(*PPA、PA都是变量指针,存放的是变量的地址)
PPA=&PA;(PPA是指向指针的指针,存放的是指针的地址)
PA是整型指针,他的值是整型变量A的地址&A;
PPA是指向指针的指针;他的值是指针PA的地址&PA;
void GetMemory2(char **p, int num)//char **p是指向指针的指针存放的是一个指针的地址
{
*p = (char *)malloc(sizeof(char) * num);//(*p)往变量p所存的值所指向的地址赋值 即往上表中的0x58这个地址赋值、即改变指针变量的值 改变str的
//指向。最终str将指向malloc所返回的地址空间
}
void Test2(void)
{
char *str = NULL;
GetMemory2(&str, 100); //注意参数是&str(指针的地址),而不是str(指针的值)
strcpy(str, "hello");
cout<< str << endl;
free(str);
}解析:如果非得要用指针参数去申请内存,那么应该改用“ 指向指针的指针”.由于“ 指向指针的指针”这个概念不容易理解,我们可以用函数返回值来传递动态内存。
指针是一个变量,该变量的值是另一个变量的地址
变量 | int *P=&a | int a=5 |
变量值 | 0x35df | 5 |
变量地址 | 0x6325 | 0x53df |
二 指针类型
指针所指向变量的类型就是指针的类型
例2,有三个不同的变量:请问右边的三个运算有何不同
int A,*PI=&A; PI++; 地址增加两个字节
Char B,*PC =&B; PC++; 地址增加一个字节
Float C,*PF=&C; PF++; 地址增加两个字节
指针的三个要素
1、指针指向的地址(其实就是指针的值)
2、指针指向的地址上的内容
3、指针本身的地址(其实就是指向指针的指针的值)
例 int A , *PA, **PPA;
PA=&A;
PPA=&PA;
则 **PPA=*PA=A;
*PPA=PA=&A;(*PPA、PA都是变量指针,存放的是变量的地址)
PPA=&PA;(PPA是指向指针的指针,存放的是指针的地址)
PA是整型指针,他的值是整型变量A的地址&A;
PPA是指向指针的指针;他的值是指针PA的地址&PA;
指向指针的指针 | 整型指针变量 | 整型变量 | |
变量 | int **PPA=&PA | int *PA=&A | int A=5 |
变量的值 | 0x58 | 0X43 | 5 |
变量的地址 | 0X74 | 0X58 | 0X43 |
{
*p = (char *)malloc(sizeof(char) * num);//(*p)往变量p所存的值所指向的地址赋值 即往上表中的0x58这个地址赋值、即改变指针变量的值 改变str的
//指向。最终str将指向malloc所返回的地址空间
}
void Test2(void)
{
char *str = NULL;
GetMemory2(&str, 100); //注意参数是&str(指针的地址),而不是str(指针的值)
strcpy(str, "hello");
cout<< str << endl;
free(str);
}解析:如果非得要用指针参数去申请内存,那么应该改用“ 指向指针的指针”.由于“ 指向指针的指针”这个概念不容易理解,我们可以用函数返回值来传递动态内存。
相关文章推荐
- trie模板 -hdu1251
- hdu 3397(区间合并)
- Hybrid App
- #牛客#代码实现:字符串的匹配、字符串的交错组成、纸牌博弈、表达式组合
- 消除: warning C4996: 'sprintf': This function or variable may be unsafe. Consider 的方法
- UITextFiledView页面之间的相互传值
- Tomcat - JNDI 配置
- 求子数组的最大和
- Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger
- 条款03 use const whenever possible
- ESB-Mule-demo-实例
- Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger
- LSM树以及在hbase中的应用
- NOIP 马拦过河卒
- bzoj2594
- 用了17年的Google Logo大改了
- hdu1060 Leftmost Digit
- Android开发之自定义控件与属性动画Animation的结合使用
- UvaLive 3709 Hard Life(最大密度子图)
- Schema约束