参考文章,值得一看

    char arr[3];
printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2);
char *parr[3];
printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2);

从结果可以看到,字符数组每个元素占1字节,字符指针数组每个占4字节。

再看一个例子:

    char a = 'a', b = 'b', c = 'c', d = 'd';
char *arr[20] = {&a,&b,&c,&d};
char **parr = arr; //arr的类型也是char**
char *str;
printf("&a:%d,&b:%d,&c:%d,&d:%d\n", &a, &b, &c, &d);
printf("&arr[0]:%d,&arr[1]:%d,&arr[2]:%d,&arr[3]:%d\n", &arr[0], &arr[1], &arr[2], &arr[3]);
printf("arr:%d,parr:%d\n", arr,parr);
printf("*parr:%d,**parr:%c\n", *parr, **parr);
str = *parr; //arr[0],char*类型
printf("----- str=*parr -----\n");
printf("str:%d,*str:%c\n", str, *str);
str++;
printf("----- str++ -----\n");
printf("str:%d,*str:%c\n", str, *str); str = *(parr + 1);
printf("----- str=*(parr+1) -----\n");
printf("str:%d,*str:%c\n", str, *str);
str = *(parr + 2); //*(arr+2*4)
printf("----- str=*(parr+2) -----\n");
printf("str:%d,*str:%c\n", str, *str);



指针的加减运算,就是将指针当前值与sizeof(指针指向的类型)相加减

比如上例中str=*parr,这时str当前值为arr[0],指向的类型是一个字符(所以大小为1字节),str++就代表arr[0]+1*1,但是由于指针数组的每一项占4字节,所以之后的*str输出为?。

再比如上例中str=*(parr+1),指针parr当前值为arr,指向的类型是一个字符指针char*类型(所以大小为4字节),parr+1就代表arr+1*4,向高地址方向移动4个字节,即&arr[0]+4==&arr[1],str就变成了arr[1],所以之后输出的*str为b。

另外

指针和指针进行加减:两个指针不能进行加法运算,这是非法操作,因为进行加法后,得到的结果指向一个不知所向的地方,而且毫无意义。两个指针可以进行减法操作,但必须类型相同,一般用在数组方面,不多说了。

C语言中指针的加减运算的更多相关文章

  1. Linux中日期的加减运算

    Linux中日期的加减运算 目录 在显示方面 在设定时间方面 时间的加减 正文 date命令本身提供了日期的加减运算. date 可以用来显示或设定系统的日期与时间. 回到顶部 在显示方面 使用者可以 ...

  2. void *指针的加减运算

    1.手工写了一个程序验证void *指针加减运算移动几个字节: //本程序验证空类型指针减1移动几个字节 #include <stdio.h> int main(int argc, cha ...

  3. C语言中指针和数组

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

  4. C语言中指针变量的加减运算

    1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址.指针变量可以加减,但是只能与整型数 ...

  5. 大整数加减运算的C语言实现

    目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...

  6. [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

  7. Leetcode 592.分数加减运算

    分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分 ...

  8. Java实现 LeetCode 592 分数加减运算(纯体力活)

    592. 分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...

  9. velocity加减运算注意格式 ,加减号的左右都要有空格

    velocity加减运算注意格式 ,加减号的左右都要有空格 #set( $left= $!biz.value - $vMUtils.getReturnMoney($!biz.billBuy) )

随机推荐

  1. 类型配置命名空间 —— XML schema

    对于基于 XML 的配置,Spring 2.0 以后告别 DTD 格式(Document Type Definition)的配置文件,开始采用 Schema 格式,Schema 的突出亮点即是可让不同 ...

  2. [Codeforces 639B] Bear and Forgotten Tree 3

    [题目链接] https://codeforces.com/problemset/problem/639/B [算法] 当d > n - 1或h > n - 1时 , 无解 当2h < ...

  3. 【PA 2014】Kuglarz

    [题目链接]            点击打开链接 [算法]            sum[i]表示前i个杯子中,杯子底下藏有球的杯子总数            那么,知道[i,j]这段区间中,藏有球的 ...

  4. backbone源代码注释(部分)

    // Backbone.js 1.0.0 // (c) 2010-2013 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely ...

  5. werkzeug 详解

    首先,先向大家介绍一下什么是 werkzeug,Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库.这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架, ...

  6. POJ 2104 HDU 2665 主席树 解决区间第K大

    两道题都是区间第K大询问,数据规模基本相同. 解决这种问题, 可以采用平方划分(块状表)复杂度也可以接受,但是实际表现比主席树差得多. 这里大致讲一下我对主席树的理解. 首先,如果对于某个区间[L,R ...

  7. Python基础:一起来面向对象 (一)

    类,一群有着相同属性和函数的对象的集合 如果你不满足于只做一个+CRUD“码农”,而是想成为一个优秀的工程师,那就一定要积极锻炼直觉思考和快速类比的能力,其是在找不到bug的时候 类的示例: clas ...

  8. JavaScript--userAgent

    userAgent 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串) 语法 navigator.userAgent 几种浏览的user_agent.,像360的兼容模式用的是IE.极速模 ...

  9. 使用Oracle SQL Developer迁移MySQL至Oracle数据库

    Oracle SQL Developer是Oracle官方出品的数据库管理工具.本文使用Oracle SQL Developer执行从MySQL迁移至Oracle数据库的操作. 2017年3月6日 操 ...

  10. rman 问题

    1. RMAN Repeatedly Fail To Backup Archivelogs with RMAN-20242 Cause: There is a mis-match between th ...