#运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标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且硬件具有硬件增量模型时,表现更佳。
#运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针的更多相关文章
- 11-C语言指针&一维数组&字符串
一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...
- 指针类型(C# 编程指南)
原文地址:https://msdn.microsoft.com/zh-cn/library/y31yhkeb.aspx 在不安全的上下文中,类型可以是指针类型.值类型或引用类型. 指针类型声明采用下列 ...
- C#基础指针类型
在C#的不安全的代码书写中,类型可以是指针类型.值类型或引用类型. 指针类型声明具有下列形式之一: type* identifier; void* identifier; //allowed bu ...
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- void类型和void *指针类型(网上摘抄总结)【转】
http://www.blogjava.net/fhtdy2004/archive/2009/07/09/286004.html 现在在学linux编程过程中遇到很多void *指针类型,由于c很早学 ...
- C语言中指针和数组
C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...
- c++用指针交换数组
对于指针一直很迷,今天看了一下指针交换数组,知识量很少,希望能帮助到大家. 利用指针来交换数组主要是为了节省时间嘛,有两种交换方式 第一种是写一个函数把数组传过去然后用swap交换,即可 代码如下: ...
- 指针、数组与sizeof运算符
指针.数组与sizcof运算符 (1)sizeof是c语言的一个运算符(主要sizeof不是函数,虽然用法很像函数),sizeof的作用是用来返同()里面的变量或者数据类型占用的内存字节数. (2)s ...
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
随机推荐
- CRC16
http://www.stmcu.org/chudonganjin/blog/12-08/230184_515e6.html 1.循环校验码(CRC码): 是数据通信领域中最常用的一种差错校验码,其特 ...
- VS2013 连接 MySQL
1.安装必须的工具: mysql-connector-net-6.8.3 mysql-installer-community-5.6.16.0.msi mysql-for-visualstudio-1 ...
- 哪一个不是EL定义的隐式对象?(选择1项)
哪一个不是EL定义的隐式对象?(选择1项) A cookie B.pageContext C.attributes D initParam 解答:C 1)pageContext:JSP 页的上下文.它 ...
- pip下载默认绕过代理
centos7下使用pip7.1.0安装软件,在shell下设置了全局http_proxy和https_proxy,但是每次都遇到网络超时问题, 后来使用pip install xxx --proxy ...
- hrbustoj 1305:多边形(计算几何,极角排序练习)
多边形 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 113(42 users) Total Accepted: 51(3 ...
- WPF进阶之接口(1):IValueConverter,IMultiValueConverter
看一个例子,FontFamily="Trebuchet MS, GlobalSansSerif.CompositeFont" .这样一条简单的语句,熟悉WPF的人在xaml中可能经 ...
- 【深入Java虚拟机】之二:Class类文件结构
平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现.不仅使用Java编译器可以把Java代码编译成存储字节码的Cla ...
- 一文彻底解决Ubuntu上PHP的安装以及版本切换
Ubuntu上官方的源,比如 Ubuntu14.04 默认源中的是 PHP5.6.x.Ubuntu16.04 默认源中的是 PHP7.0.x,那么如果想在 Ubuntu16.04 上安装 PHP7.1 ...
- 160420、zTree获取所有选中节点数据
<!DOCTYPE html><HTML><HEAD> <TITLE> ZTREE DEMO - Standard Data </TITLE> ...
- Hadoop中正确地添加和移除节点
正确地添加和移除节点 添加节点 克隆 克隆一台全新的Linux(如有IP冲突,可右击VMware右下角网络图标断开连接) 打开/etc/hostname修改主机名 打开/etc/sysconfig/n ...