1,指针+1 地址变化

#include <stdio.h>
int main(){int a[]={0,1,2,3,4,5,6};int *p=a;int *p1=p+1;printf("p = %p\n",p);printf("p1 = %p",p1);return 0;
} 输出:
p = 000000000062FDF0
p1 = 000000000062FDF4

相差4个字节,也就是  指针+1==指针内存地址+sizeof(指针类型)

2,指针+1 值变化

#include <stdio.h>
int main(){int a[]={0,1,2,3,4,5,6};int *p=a;int *p1=p+1;printf("p = %d\n",*p);printf("p1 = %d",*p1);return 0;
} 指针:
p = 0
p1 = 1

给指针加一,表示要让指针指向下一个变量

*p --->a[0]

*(p+1) --->a[1]

3,指针可进行算术运算

  • 加减一个整数
  • ++   --
  • 指针相减

(1)指针相减

#include <stdio.h>
int main(){int a[]={0,1,2,3,4,5,6};int *p=a;int *p1=&a[2];printf("p = %p\n",p);printf("p1 = %p\n",p1);printf("相差 = %p",p1-p);return 0;
} 输出:
p = 000000000062FDF0
p1 = 000000000062FDF8
相差 = 0000000000000002

 竟然不是8,而是4.说明指针相减结果不是地址差,而是 地址差/sizeof(指针类型)

4,*p++

  •  * 优先级没有 ++ 高
  • 取出p所指的数据,顺便把P移到下一个位置
#include <stdio.h>
int main(){int a[]={0,1,2,3,4,5,6,-1};int *p=a;while(*p!=-1){printf("%d ",*p++);}return 0;
} 输出:
0 1 2 3 4 5 6

5,指针比较

  • 实际上是内存地址大小比较
  • < > >= <= == !=

6,0地址

  • 内存有0地址,不能随便碰

  • NULL <----> 0地址

7,指针特点

  • 不同类型指针,大小一样
  • 不同类型指针,不能相互赋值
  • #include <stdio.h>
    int main(){int a[]={0,1,2,3,4,5,6,-1};int *p=a;double *k;k=p;return 0;
    } [Error] cannot convert 'int*' to 'double*' in assignment

void* 指针   不知道指向什么的指针

8,PTA

(1)语句int *p; *p = 50;执行时,不会有任何错误。(X)

没有先给指针P初始化,就使用指针

(2)

以下选项中,对基本类型相同的指针变量不能进行运算的运算符是 (D)。

A.-

B.=

C.==

D.+

两个地址相加无意义,且可能越界。

地址越界:100KB的内存用于你的数据存储或者程序运行,但是这个时候你却暂用了大于100KB的内存,这样就越界了,多出来的部分,系统并不知道怎么去解析或者动态给你分配,所以出于对程序和系统的保护,用一种和谐的方式告诉你内存越界了或者通用内存访问错误

(3)执行语句int *p = 1000;后,指针变量p指向地址为1000的变量。(X)

报错

#include <stdio.h>
int main(){int *p=1000; return 0;
} [Error] invalid conversion from 'int' to 'int*' [-fpermissive]

指针运算(自己做个笔记)相关推荐

  1. C语言指针(就做个笔记)

    一.取地址运算 1.sizeof()函数 用于求 变量或数据类型所占字节数 #include <stdio.h> int main(){int num_1,num_2,a;a=2;num_ ...

  2. 函数指针(就做个笔记)

    1,函数的地址 #include <stdio.h> int main(){int i=0;printf("main=%p\n",main);printf(" ...

  3. 翁恺老师C语言学习笔记(十)指针_指针运算

    我们先看一段代码 #include <stdio.h>int main(void) {char ac[] = {0,1,2,3,4,5,6,7,8,9,};char *p = ac;pri ...

  4. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  5. 4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)

    用指针访问数组元素[1] 数组是一组连续存储的同类型数据,可以通过指针的算术运算,使指针依次指向数组的各个元素,进而可以遍历数组. 定义指向数组元素的指针 定义与赋值 例: int a[10], *p ...

  6. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  7. 【C基础】指针/指针运算/二级指针/函数指针

    指针定义: 指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号. 指针的使用: 1.函数之间相独立,但有些时候需要共享变量.传参是值传递全局变量容易命 ...

  8. c++ 对象起始地址 指针靠齐_Go的内存对齐和指针运算详解和实践

    uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough t ...

  9. 5.2.4 std::atomic:指针运算

    5.2.4 std::atomic:指针运算 原子指针类型,可以使用内置类型或自定义类型T,通过特化 std::atomic<T*> 进行定义,就 如同使用bool类型定义 std::at ...

  10. 指针定义、指针与数组、指针运算、比较

    目录 一.指针相关定义 二.数组与指针 1.数组变量是特殊的指针 2.指针与const a.所指是const时 b.const转化 c.const数组 三.指针运算 指针+1: *p++ 四.指针比较 ...

最新文章

  1. 零基础学UI设计,哪些知识需要重点学习?
  2. python 转成摩尔斯电码_一篇文章教会你摩尔斯码
  3. [翻译] ABCIntroView
  4. 20145228 《信息安全系统设计基础》第0周学习总结
  5. 那些与 IE 相伴的日子
  6. centos6.5配置Hadoop环境,运行wordcount例子
  7. CAN总线技术 | 数据链路层01 - CAN报文的组成
  8. 开奖啦!支付宝全民撒钱 你分到多少?
  9. eclipse debug 的断点查看和清除
  10. C# List用法;已经实例测试OK,直接可用!List 增加减少元素,输出元素
  11. MaterialImageLoading
  12. 牛腩新闻发布系统——总结
  13. 军用软件开发周期和文档
  14. 水滴互助 :网络互助「创新者窘境」如何打破?
  15. 【从零开始学架构-李运华】开篇词|照着做,你也能成为架构师!
  16. vue v-for循环表格 希望第四个<th>或<td>标签自动换到下一行应该怎么做?
  17. 初入职场如何时间管理课程总结-B站
  18. PHP开发规范——转自ThinkPHP手册
  19. Pytorch警告UserWarning: Loky-backed parallel loops cannot be called in a multiprocessing
  20. 微信蓝牙设备开发--添加设备以及获取微信为设备生成的二维码

热门文章

  1. LeetCode简单题之统计匹配检索规则的物品数量
  2. LeetCode简单题之相对名次
  3. LeetCode简单题之反转字符串
  4. NVIDIA 自动驾驶软件平台
  5. Structured Streaming编程 Programming Guide
  6. JavaWeb--过滤器
  7. 商城数据库表设计介绍
  8. CentOS7在防火墙开启与关闭以及端口操作
  9. DCN-cs6200 ipv6 isatap 隧道
  10. Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in lib