C提高(4):
2015-10-20 12:28
218 查看
铁律1:指针是一种数据类型
1)指针也是一种变量,占有内存空间,用来保存内存地址;
指针是一种变量:
void main()
{
char *p1=NULL;
printf("p1:%d\n",sizeof(p1));
system("pause");
}//结果就是:P1:4
void main()
{
char **p2=NULL;
printf("p2:%d\n",sizeof(p2));
system("pause");
}//结果就是:P2:4
引申:
//char *p1形参,形参也是被调用该函数的参数,只不过具有对外属性
void getData(char *p1)
{
printf("getData() begin\n");
return 0;
}
//char **p2形参,
void getData2(char **p2)
{
printf("getData2() begin\n");
return 0;
}
总结:以此而言,无论是增加了几个“*”,这些数据依然是变量;
2)*p操作内存
int c=0;
int a=10;
int *p3=NULL;
a=20;//直接通过变量来修改a的值
p3=&a;//
//*p3放在=号的左边,去修改内存空间的值;
*p3=30;//通过指针间接修改内存空间的值
c=*p3;//*p3放在等号的右边从内存空间中取值
总结:
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示操作指针所指向的内存空间中的值。
*p相当于通过地址(P变量的值)找到一块内存,然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
3)指针变量和它只想的内存块是两个不同的概念
引申:对于以下程序语句的理解
void senddata01(char *p1);
void senddata02(char **p1);
void senddata03(char ***p1);
void senddata04(char *p[ ]);
void senddata05(char (*p)[10]);
void senddata06(char *****p4);
先站在C/C++编译器的角度去理解,无论变量前面有几个*号,只要有一个*号出现,那么,编译器就会把它作为指针来理解,并且根据数据类型为char,分配一个字节的内存。
指针的数据类型是什么?指针的数据类型是指它所指向的内存空间的数据类型。
引申:一些内存空间是不允许写入数值的:
例如:char *p=0x77;
*p=100;
运行时就会出现这样的错误:###.exe中0x00412728处有未经处理的异常:0x0000005:写入位置0x00000077时发生冲突
1)指针也是一种变量,占有内存空间,用来保存内存地址;
指针是一种变量:
void main()
{
char *p1=NULL;
printf("p1:%d\n",sizeof(p1));
system("pause");
}//结果就是:P1:4
void main()
{
char **p2=NULL;
printf("p2:%d\n",sizeof(p2));
system("pause");
}//结果就是:P2:4
引申:
//char *p1形参,形参也是被调用该函数的参数,只不过具有对外属性
void getData(char *p1)
{
printf("getData() begin\n");
return 0;
}
//char **p2形参,
void getData2(char **p2)
{
printf("getData2() begin\n");
return 0;
}
总结:以此而言,无论是增加了几个“*”,这些数据依然是变量;
2)*p操作内存
int c=0;
int a=10;
int *p3=NULL;
a=20;//直接通过变量来修改a的值
p3=&a;//
//*p3放在=号的左边,去修改内存空间的值;
*p3=30;//通过指针间接修改内存空间的值
c=*p3;//*p3放在等号的右边从内存空间中取值
总结:
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示操作指针所指向的内存空间中的值。
*p相当于通过地址(P变量的值)找到一块内存,然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
3)指针变量和它只想的内存块是两个不同的概念
引申:对于以下程序语句的理解
void senddata01(char *p1);
void senddata02(char **p1);
void senddata03(char ***p1);
void senddata04(char *p[ ]);
void senddata05(char (*p)[10]);
void senddata06(char *****p4);
先站在C/C++编译器的角度去理解,无论变量前面有几个*号,只要有一个*号出现,那么,编译器就会把它作为指针来理解,并且根据数据类型为char,分配一个字节的内存。
指针的数据类型是什么?指针的数据类型是指它所指向的内存空间的数据类型。
引申:一些内存空间是不允许写入数值的:
例如:char *p=0x77;
*p=100;
运行时就会出现这样的错误:###.exe中0x00412728处有未经处理的异常:0x0000005:写入位置0x00000077时发生冲突
相关文章推荐
- IOS-TextField知多少
- NSParameterAssert延伸出去的理解
- 赤裸裸的splay平衡树
- Java类的连接与初始化 (及2013阿里初始化笔试题解析)
- KMP算法实现
- nohup 输出重定向
- 读取日志文件进行用户数据进库不完整补漏
- mysql 查找重复的字段,并删除记录只保留一条
- 【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
- 【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
- Python发送邮件的例子
- 关于友元类
- [转] ios数组基本用法和排序
- JSP EL表达式忽略方法
- 给 Android 开发者的 RxJava 详解
- [转] 【iOS基础知识】之判断NSString是否为整数、浮点数
- HTML学习5:常用标签之图像标签
- pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式
- JSP中param标签用法实例分析
- 25.Android 轻缓存工具SharedPreferencesUtil