一、指针的加、减法运算

/*
1、加法运算
1)、可以跟整数进行加法运算,得到的还是一个地址
公式:
地址 + 1 = 地址 + 1 * 类型所占的字节数
地址 + n = 地址 + n * 类型所占的字节数
2)、只能跟整数运算,不能跟浮点数运算 2、指针的减法运算:
1)、可以跟整数进行减法运算,得到的还是一个地址 公式:
地址 - 1 = 地址 - 1 * 类型所占的字节数 地址 - n = 地址 - n * 类型所占的字节数 2)、只能跟整数运算,不能跟浮点数运算 */
//例如:
//int类型的指针+1,结果等于原地址+4个字节
//0x7fff5fbff7cc - 0x7fff5fbff7d0
/*
int num = 10;
int *pNum = #//变量名是pNum 类型是int *
printf("%p\n",pNum);//0x7fff5fbff7cc
printf("%p\n",pNum+1); //0x7fff5fbff7d0
*/ //char类型的指针+1,结果等于原地址+1个字节
//0x7fff5fbff7cf - 0x7fff5fbff7d0
/*
char ch = 'a';
char *pCh = &ch;
printf("%p\n",pCh);//0x7fff5fbff7cf
printf("%p\n",pCh + 1);//0x7fff5fbff7d0
*/ //float类型的指针+1,结果等于原地址+4个字节
//0x7fff5fbff7cc - 0x7fff5fbff7d0
/*
float f = 10.3f;
float *p = &f;
printf("%p\n",p); //0x7fff5fbff7cc
printf("%p\n",p+1);//0x7fff5fbff7d0
*/ //double类型的指针+1,结果等于原地址+8个字节
//0x7fff5fbff7c8 - 0x7fff5fbff7d0
/*
double d = 10.3;
double *p = &d;
printf("%p\n",p); //0x7fff5fbff7c8 printf("%p\n",p+1);//0x7fff5fbff7d0
*/ //long类型的指针+1,结果等于原地址+8个字节
//0x7fff5fbff7c8 - 0x7fff5fbff7d0
/*
long num = 10l;
long *p = #
printf("%p\n",p);//0x7fff5fbff7c8
printf("%p\n",p+1);//0x7fff5fbff7d0
*/ //指针只能跟整数运算,不能跟浮点数运算
/*
int num = 10;
int *p = #
printf("%p\n",p+1.0); //报错
*/

二、指针加减法的作用

/*
指针跟整数的加法和减法都可以用来遍历数组
加法:
int nums[3] = {10,20,30};
int *p = &nums[0];
for (int i = 0; i<3; i++) {
printf("%d\n",*(p+i));
} 减法:
int nums[3] = {10,20,30};
int *p = &nums[2];
for (int i = 0; i<3; i++) {
printf("%d\n",*(p-i));
}
*/

三、指针和指针的运算

/*
指针可以和指针进行运算,但是只能进行减法运算。
指针和指针的减法运算,结果是一个long类型。
a.指针跟指针之间只能做减法运算,加、乘、除、取余都不可以。
b.指针跟指针之间的运算结果是一个整数,而且是long类型的。
c.指针跟指针之间的运算,必须是相同类型的指针,否则报错。 作用:指针的减法运算,只要是为了计算两个地址之间,相差了几个位(几个相同类型的空间) 公式:
地址 - 地址 = (地址 - 地址)/ 类型所占字节数
*/
//例如:
int num1=,num2=,*p1 = &num1,*p2 = &num2;
printf("%ld\n",p1-p2);//

四:指针运算的注意事项

/*
注意:
指针和整数,不能相数
指针和整数,不能相除
指针和整数,不能取余
加法和减法都不能和浮点数进行运算。 */

五、指针函数的介绍

/*
指针函数:
其实应该在中间加一个的字。叫 指针的函数,本质上还是一个函数。 当函数的返回值是一个指针的时候,就叫指针函数。 定义语法:
类型 * 函数名(参数列表){ 函数体;
} 注意:这个*可以放在类型和函数名中间的任意位置。 内存中有一个地方叫栈区,栈区里面放的是局部变量。 有一个特点:出了作用域,就会回收。 注意:用指针函数的话,目前没什么用,C语言中的数据类型只要是局部的都是存在栈里面的。 用处的话:只能返回全局变量或者返回字符串常量,还可以返回静态变量的地址。 */
#include <stdio.h> int qNum = ; int *test(){ //函数名是test 返回值是int * // int num = 1; // int *p = &num; // return &num; return &qNum;
} char *test2(){ char *str = "qwe"; return str;
} int main(int argc, const char * argv[]) { /*
int *p = test(); int nums[100] = {0}; printf("%d\n",*p);
*/ char *str = test2(); printf("%s\n",str); return ;
}

函数的指针将在下一篇介绍。

c语言学习之基础知识点介绍(十四):指针的进阶的更多相关文章

  1. c语言学习之基础知识点介绍(四):算术运算符和逗号表达式

    本节主要介绍c语言中运算符. 运算符主要分为四类: 1.算术运算符 加(+),减(-),乘(*),除(/),取余(%,两数相除,得到余数) 2.关系运算符 3.逻辑运算符 4.换位运算符 下面将依次介 ...

  2. oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍

    一.方法重写 /* 重写:当子类继承了父类的方法时,如果觉得父类的方法不适合,那么可以对这个方法进行重新实现,那么这个就重写. 注意:也就是说,一定只能发生在父类和子类关系中. 然后是子类重新实现父类 ...

  3. c语言学习之基础知识点介绍(三):scanf函数

    本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...

  4. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

  5. c语言学习之基础知识点介绍(十):数组

    本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...

  6. c语言学习之基础知识点介绍(二十):预处理指令

    一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...

  7. c语言学习之基础知识点介绍(十五):函数的指针

    一.函数的指针的介绍 /* 函数指针: 函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针. 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读 ...

  8. c语言学习之基础知识点介绍(十二):结构体的介绍

    一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...

  9. c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量

    一.内存 /* 内存: 存在内存里的. 内存分了N多个小空间,每个小空间1个字节 每个小空间有它自己的地址.每个地址之间差1 int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址 ...

随机推荐

  1. [转]用C#实现的条形码和二维码编码解码器

    条形码的标准: 条形码的标准有ENA条形码.UPC条形码.二五条形码.交叉二五条形码.库德巴条形码.三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码.EAN商品条形码亦称通用商品条形 ...

  2. BILL.WEI]stimulsoft reports 中panel 妙用

    我们在通过stimulsoft reports做报表,有的时候,我们需要通过合并报表的一些中间列元素,我们就可以用到panel组件 如下图,我们需要合并报表中间项,一般手段达不到要求,只能通过嵌套pa ...

  3. ActiveMQ, RabbitMQ和ZeroMQ 选型关注点

    选择MQ时,主要关注的特性,可能就以下几个: 通信模式(是否满足业务场景): ActiveMQ: queue(producer/consumer), topic(publisher/subsriber ...

  4. [Codechef October Challenge 2014]刷漆

    问题描述 Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板 ...

  5. Msys下gcc的配置

    打开文件/etc/profile,添加如下路径, C_INCLUDE_PATH=/e/msys/1.0/include export C_INCLUDE_PATH CPLUS_INCLUDE_PATH ...

  6. PLSQL配置介绍

    PLSQL配置简介,优化   来自为知笔记(Wiz) 附件列表 s=selectf=FROMw=WHEREsf=SELECT * FROMdf=DELETE FROMsc=SELECT COUNT(* ...

  7. HDOJ-ACM1019(JAVA) 多个数的最小公倍数

    题意:求多个数的最小公倍数 很简单,但是我一开始的做法,估计会让结果越界(超过int的最大值) import java.util.*; import java.io.*; public class M ...

  8. tool

    数据结构,堆栈基本原理; 数组,堆栈,结构体等系列,数据结构间区别联系; 在此我就不饶了,直接上大白话(我总认为干些实事,比扯淡强....),故事虚构,若有雷同,请你下方留言; ruiy讲的,所跑的托 ...

  9. fckeditor的用法

    1.下载解压文件 2.将解压后的文件放入webroot下 3.将js引入要使用fckeditor的页面 4.用ckeditor替换textarea <@e.textarea id="t ...

  10. 编写Word宏使选中的图片改变为固定宽度并保持纵横比

    代码如下: Sub 改变图片宽度为12并设置灰色边框() ' ' 改变图片宽度为12并设置灰色边框 宏 ' '     ' Application.Run MacroName:="改变图片大 ...