指针运算(自己做个笔记)
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]
指针运算(自己做个笔记)相关推荐
- C语言指针(就做个笔记)
一.取地址运算 1.sizeof()函数 用于求 变量或数据类型所占字节数 #include <stdio.h> int main(){int num_1,num_2,a;a=2;num_ ...
- 函数指针(就做个笔记)
1,函数的地址 #include <stdio.h> int main(){int i=0;printf("main=%p\n",main);printf(" ...
- 翁恺老师C语言学习笔记(十)指针_指针运算
我们先看一段代码 #include <stdio.h>int main(void) {char ac[] = {0,1,2,3,4,5,6,7,8,9,};char *p = ac;pri ...
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- 4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)
用指针访问数组元素[1] 数组是一组连续存储的同类型数据,可以通过指针的算术运算,使指针依次指向数组的各个元素,进而可以遍历数组. 定义指向数组元素的指针 定义与赋值 例: int a[10], *p ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 【C基础】指针/指针运算/二级指针/函数指针
指针定义: 指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号. 指针的使用: 1.函数之间相独立,但有些时候需要共享变量.传参是值传递全局变量容易命 ...
- c++ 对象起始地址 指针靠齐_Go的内存对齐和指针运算详解和实践
uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough t ...
- 5.2.4 std::atomic:指针运算
5.2.4 std::atomic:指针运算 原子指针类型,可以使用内置类型或自定义类型T,通过特化 std::atomic<T*> 进行定义,就 如同使用bool类型定义 std::at ...
- 指针定义、指针与数组、指针运算、比较
目录 一.指针相关定义 二.数组与指针 1.数组变量是特殊的指针 2.指针与const a.所指是const时 b.const转化 c.const数组 三.指针运算 指针+1: *p++ 四.指针比较 ...
最新文章
- 零基础学UI设计,哪些知识需要重点学习?
- python 转成摩尔斯电码_一篇文章教会你摩尔斯码
- [翻译] ABCIntroView
- 20145228 《信息安全系统设计基础》第0周学习总结
- 那些与 IE 相伴的日子
- centos6.5配置Hadoop环境,运行wordcount例子
- CAN总线技术 | 数据链路层01 - CAN报文的组成
- 开奖啦!支付宝全民撒钱 你分到多少?
- eclipse debug 的断点查看和清除
- C# List用法;已经实例测试OK,直接可用!List 增加减少元素,输出元素
- MaterialImageLoading
- 牛腩新闻发布系统——总结
- 军用软件开发周期和文档
- 水滴互助 :网络互助「创新者窘境」如何打破?
- 【从零开始学架构-李运华】开篇词|照着做,你也能成为架构师!
- vue v-for循环表格 希望第四个<th>或<td>标签自动换到下一行应该怎么做?
- 初入职场如何时间管理课程总结-B站
- PHP开发规范——转自ThinkPHP手册
- Pytorch警告UserWarning: Loky-backed parallel loops cannot be called in a multiprocessing
- 微信蓝牙设备开发--添加设备以及获取微信为设备生成的二维码
热门文章
- LeetCode简单题之统计匹配检索规则的物品数量
- LeetCode简单题之相对名次
- LeetCode简单题之反转字符串
- NVIDIA 自动驾驶软件平台
- Structured Streaming编程 Programming Guide
- JavaWeb--过滤器
- 商城数据库表设计介绍
- CentOS7在防火墙开启与关闭以及端口操作
- DCN-cs6200 ipv6 isatap 隧道
- Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in lib