一、指针的加、减法运算

/*
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. bootstrap基本标签总结[转]

    文件头: DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  2. 杨氏矩阵 leecode 提

    提交网址https://oj.leetcode.com/problems/search-a-2d-matrix/ 有个矩阵中的数,从左向右递增,从上而下递增,快速查找是一个数是是否存在,剑指offer ...

  3. bzoj 1880 [Sdoi2009]Elaxia的路线(最短路+拓扑序)

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...

  4. HW4.36

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. jsp 相关特性

    下面要注意一个问题,“只要浏览器关闭,session就消失”,那么这个论断是否正确呢?对于session除非程序通知服务器删除一个 session,否则服务器会一直保留,程序一般都是在用户做log o ...

  6. 选择一个 HTTP 状态码不再是一件难事 – Racksburg

    原文链接:http://racksburg.com/choosing-an-http-status-code/ 打开双语对照阅读 有什么能比 HTTP 响应状态码更简单呢?页面渲染了吗?好极了,返回  ...

  7. stream转byte数组几种方式

    第一种,写法最简单的.使用原生IO,一个字节一个字节读: //一个字符一个字符读,太慢 int i; while((i=in.read()) != -1){ i = in.read(); arr[j+ ...

  8. local storage 简单应用‘’记住密码’

    前些时候一直用cookie等来进行登录页面记住面膜操作,但是由于其存储容量小等缘故,所以后来转向local storage,原理为:当用户勾选记住密码时,local storage 存储用户名密码同时 ...

  9. dublin core实例

    <?xml version="1.0"?> <metadata xmlns="http://example.org/myapp/" xmlns ...

  10. Hash表

    Hash表 Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组.链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字 ...