#运算符:用于在预编译期将宏参数转换为字符串

#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指针的更多相关文章

  1. 11-C语言指针&一维数组&字符串

    一.用指针遍历数组元素 1.最普通的遍历方式是用数组下标来遍历元素 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 int i; 5 for (i = ...

  2. 指针类型(C# 编程指南)

    原文地址:https://msdn.microsoft.com/zh-cn/library/y31yhkeb.aspx 在不安全的上下文中,类型可以是指针类型.值类型或引用类型. 指针类型声明采用下列 ...

  3. C#基础指针类型

    在C#的不安全的代码书写中,类型可以是指针类型.值类型或引用类型. 指针类型声明具有下列形式之一:   type* identifier; void* identifier; //allowed bu ...

  4. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  5. void类型和void *指针类型(网上摘抄总结)【转】

    http://www.blogjava.net/fhtdy2004/archive/2009/07/09/286004.html 现在在学linux编程过程中遇到很多void *指针类型,由于c很早学 ...

  6. C语言中指针和数组

    C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...

  7. c++用指针交换数组

    对于指针一直很迷,今天看了一下指针交换数组,知识量很少,希望能帮助到大家. 利用指针来交换数组主要是为了节省时间嘛,有两种交换方式 第一种是写一个函数把数组传过去然后用swap交换,即可 代码如下: ...

  8. 指针、数组与sizeof运算符

    指针.数组与sizcof运算符 (1)sizeof是c语言的一个运算符(主要sizeof不是函数,虽然用法很像函数),sizeof的作用是用来返同()里面的变量或者数据类型占用的内存字节数. (2)s ...

  9. Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法

    由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...

随机推荐

  1. WebIM技术---编写前端WebSocket组件

    过去我们想要实现一个实时Web应用通常会考虑采用ajax轮循或者是long polling技术,但是因为频繁的建立http连接会带来多余的请求以及消息精准性的问题,让我们在实现实时Web应用时头疼不已 ...

  2. 单引號转义符q’的使用

    当字符串包括单引號时,能够使用转义符q'对单引號进行转义. q'后面的字符能够是:     !     [ ]     { }     ( )     < > 前提是这些字符不会出如今兴许 ...

  3. 比较难的sql面试题--记录下来晚上做

    一组通话记录(总共500万条):ID 主叫号码 被叫号码 通话起始时间   通话结束时间           通话时长1  98290000 0215466546656 2007-02-01 09:4 ...

  4. 在WPF中弹出右键菜单时判断鼠标是否选中该项

      和上篇在WPF的TreeView中实现右键选定一样,这仍然是一个右键菜单的问题: 这个需求是在一个实现剪贴板的功能的时候遇到的:在弹出右键菜单时,如果菜单弹出位置在ListViewItem中时,我 ...

  5. An Edge-Guided Image Interpolation Algorithm via Directional Filtering and Data Fusion【翻译】

    基于定向滤波和数据融合的边缘引导图像插值算法 http://ieeexplore.ieee.org/document/1658087/ 摘要: 保留边缘结构对于从低分辨率对应物重建高分辨率图像的图像插 ...

  6. MFC WinInetHttp抓取网页代码内容

    Windows Internet编程主要包括两方面: l  服务器端   l  客户端 WinInet编程 Internet客户端主要实现的功能,主要是通过Internet协议(HTTP.FTP等)获 ...

  7. 在VS中调试javascript脚本

    https://blog.csdn.net/u010228798/article/details/78207375

  8. Struts2_day04--课程介绍_Struts2拦截器概述&底层原理_重要的概念

    Struts2_day04 上节内容 今天内容 Struts2拦截器概述 拦截器底层原理 重要的概念 自定义拦截器 自定义登录拦截器 Struts2的标签库 Struts2表单标签(会用) Strut ...

  9. iOS开发之--使用storyboard下,tabbar小图标和文字颜色的设置

    在开发项目的时候,如果是使用故事版设计的架构,那么在设置tabbar小图标的时候,可能会出现一点小问题, 成功的设置方法如下: 1.设置seleectedImage和image,其实就是非选中状态的图 ...

  10. UE4中VR模式下窗口单目双目的问题

    如果要是单目的话使用HMD MIRROR MODE 3或者4