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

#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. 微信小程序 - Util工具类

    /utils/utils.js   已经扩展到App对象中,Page方法中直接使用  app.util.method(...) 调用. 1. 扩展String.replaceAll JS默认值提供re ...

  2. finals的使用

    //----------------------------------------Finals--------------------------- public class Finals { pu ...

  3. jQuery补充,模拟图片放大镜

    jQuery补充,模拟图片放大镜 html <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  4. Ribbon,主要提供客户侧的软件负载均衡算法。

    Ribbon Ribbon,主要提供客户侧的软件负载均衡算法.Ribbon客户端组件提供一系列完善的配置选项,比如连接超时.重试.重试算法等.Ribbon内置可插拔.可定制的负载均衡组件.下面是用到的 ...

  5. java 多线程 1 “常用的实现多线程的2种方式”:Thread 和 Runnable

    转载系列自http://www.cnblogs.com/skywang12345/p/java_threads_category.html 当使用第一种方式(继承Thread的方式)来生成线程对象时, ...

  6. java---springMVC与strutsMVC的区别

    spring mvc与struts的区别 标签: strutsspringmvcservletactiontomcat 2011-11-24 17:34 24205人阅读 评论(6) 收藏 举报  分 ...

  7. ThinkPHP项目笔记之MVC篇

    题记:网上关于ThinkPHP的介绍,不计其数,有文档,示例,代码片段以及其他等.毕竟自己掌握的,才是自己的. 所以,趁着做的项目(当然用的是thinkphp框架)的余热,奋笔疾书,一个人的理解与拙笔 ...

  8. RabbitMQ之Queues-5

    工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成.相反地,我们进行任务调度:我们把任务封装为消息发送给队列.工作进行在后台运行并不断的从队列中取出任务然后执行.当你运行了多个工作进 ...

  9. 实现 IteratorAggregate接口

    <?php class MyIterator implements Iterator{ private $var = array(); public function __construct($ ...

  10. springboot + ApplicationListener

    ApplicationListener自定义侦听器类 @Component public class InstantiationTracingBeanPostProcessor implements ...