#运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针
#运算符:用于在预编译期将宏参数转换为字符串
#define CONVERS(x) #x //注:没用双引号包括。
不同类型的指针占用的内存空间大小相同。
局部变量 定义:
a[5];
打印a[i]时,a[i]为随机数。
若定义a[5]={1,2};
打印时,a[0]=1;a[1]=2;a[2]=a[3]=a[4]=0;
数组地址与数组名:
1.数组名代表数组首元素的地址。 a=&a[0];
2.数组的地址需要用取地址符号&才能得到 (&a)
3.数组首元素的地址值与数组的地址值相同。
4.数组首元素的地址与数组的地址是两个不同的概念。
a+1:(unsigned int)a+sizeof(*a)//加上一个元素大小。
&a+1:(unsigned int)(&a)+sizeof(*&a)//加上整个数组大小。
指针和数组
编译器对数组和指针处理不同。
处理指针:一次寻址操作。
char *p=“HW”
访问p时->先找到内存空间->再从内存空间取得地址->根据地址找到HW。(做了一次寻址操作)
处理数组:无寻址,直接去访问。
char p[] = "HW"
指针的运算:与整数的运算规则为
P+n:(unsigned int)p+n*sizeof(*p);
指针之间的减法:注此指针必须类型相同
P1-P2:((unsigned int)p1-(unsigned int)p2)/sizeof(type);
结论:
1.当指针P指向一个同类的数组的元素时:
P+1:将指向下一个元素。
P-1:将指向上一个元素。
2.当2个指针指向同一个数组中的元素时,指针相减才有意义,为指针所指向元素的下标差。
堆区:申请的内存空间 heap。
栈区:局部变量 stack
静态区:静态变量,全局变量空间。
只读区:分配常量和程序代码空间
在main.cpp int a=; //全局初始化区
char *p1;//全局未初始化区
main()
{
int b;//栈区
char s[] = "abc";//栈区
char *p2; //栈区
char *p3 = "";123456在常量区,P3在栈区
static int c = ;全局(静态)初始化区
P1=(char*)malloc(); //堆 }
求一个数组中元素的个数:
DIM(a) = sizeof(a)/sizeof(*a);
下标VS指针:
1.从理论上而言,当指针以固定增量在数组中移动时,其效率高于下标产生的代码(下标时,乘法很耗时)。
2.当指针增量为1且硬件具有硬件增量模型时,表现更佳。
最新文章
- linux 文件系统
- 解决vsftpd的refusing to run with writable root inside chroot错误
- Python::OS 模块 -- 文件和目录操作
- Linux下安装firefox最新版
- laravel框架总结(二) -- blade模板引擎
- 最短路--hdu2544
- Android UI 使用HTML布局(直接打开server网页)
- VMware虚拟机中调整Linux分区大小手记(转发)
- 一、iOS中的事件可以分为3大类型
- delphi 子窗体只能最小化不能关闭的解决方案
- Python 字符串转JSON; 先装字典在转JSON; json.dumps(d)
- hdu6440 Dream(费马小定理)
- css3-文本新增属性
- webservice-jdk客户端代码
- 如何在HTML 5中拖动光标图标?
- 使用Log4J监控系统日志邮件警报
- P4tutorial实战
- fragment在水平/垂直时的应用
- 快速搭建YUM源和yum使用
- PgSql备份pg_dump与还原手记pg_restore(转)可以直接跳转至最后面的示例进行查看
热门文章
- 【剑指offer】翻转单词顺序
- sed替换
- hrbustoj 1104:Leyni, LOLI and Line(解析几何,斜截式的应用)
- Linux kernel parameter command line设置
- MySQL [Err]1449 : The user specified as a definer ('root'@'%') does not exist
- print多重打印
- Python零碎(一)
- eclipse中的SVN文件还原到历史版本
- jQuery返回顶部实用插件YesTop
- 160606、springmvc中使用Spring Mobile