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

#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. CSS浮动与清除浮动(overflow)例子

    在css中浮动与清除浮动功能是我们开发中常用到的一个功能了,下面小编来为各位分析关于CSS浮动与清除浮动(overflow)例子吧. float脱离文本流,可是为什么文字却会有环绕的效果,这点实在是神 ...

  2. 数据库 proc编程四

    错误处理机制 当在Pro*C/C++应用程序中运行SQL语句中,Oracle会将最近执行的SQL语句的状态信息存储到状态变量SQLCODE.SQLSTATE或者SQLCA结构中. 当SQL语句执行成功 ...

  3. jQuery替换内容

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  4. Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。

    Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试. 它是一个典型的教科书式的mvc ...

  5. 【wikioi】3160 最长公共子串(后缀自动机)

    http://codevs.cn/problem/3160/ sam的裸题...(之前写了spoj上另一题sam的题目,但是spoj被卡评测现在还没评测完QAQ打算写那题题解时再来详细介绍sam的.. ...

  6. HDU 1284 钱币兑换问题(全然背包:入门题)

    HDU 1284 钱币兑换问题(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1284 题意: 在一个国家仅有1分,2分.3分硬币,将钱N ( ...

  7. MongoDB基本用法

    MongoDB基本用法(增删改高级查询.mapreduce) 分享一下我经常用到的自己写的mongo用法示例 该示例基于当前最新的mongo驱动,版本为mongo-2.10.1.jar,用junit写 ...

  8. Hadoop单机安装配置过程:

    1. 首先安装JDK,必须是sun公司的jdk,最好1.6版本以上. 最后java –version 查看成功与否. 注意配置/etc/profile文件,在其后面加上下面几句: export JAV ...

  9. FAIL : SSHException: Incompatible ssh peer (no acceptable kex algorithm)问题解决及更新paromiko失败问题解决

    转自:http://blog.csdn.net/qy924565830/article/details/52164256 http://blog.csdn.net/coder_xia/article/ ...

  10. leetcode -- Balanced Binary Tree TODO

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...