C之指针
什么是指针
* 指针变量:用来存储某种数据在内存中的地址.
*
世面上书籍一般把指针和指针变量的概念混在一起了.
市面上的书籍说的指针指的就是指针变量
Ø *号的三种含义
1. 两个数相乘
int i =5;
int j =
5;
i*j;
2. 基本类型* 表示这种类型的指针变量
- 指向内存中这种类型的变量的地址
int i= 3;
int* p;可以存放i的地址
p=&i
3.
指针变量前加* 表取出这个指针变量里的数据
int* p;
*p
把地址里的数据取出来
指针常见错误
* 野指针:指针变量没有定义指向的地址,该指针就不能赋值(点我就蓝屏)
int* p;//声明一个指针变量用来存放一个地址
//指针变量未经赋值,不可以使用.
//*p 野指针.
printf("*p=%d\n",*p);
*
每种数据类型的地址,必须用当前类型的指针变量表示
double d =
3.14;
int *p ;//指针变量存储int类型数据的地址
//每种数据类型的地址,必须用当前数据类型的指针变量表示.
p = &d;
printf("*p=%lf\n",*p);
Ø 值传递和引用传递
* 引用传递:如果传递的值是一个内存地址,通过这个地址可以找到地址对应的引用
* 值传递:传递具体的数值
* 在java语言中对象实际上存放在某个内存地址里面,传递对象就相当于传递的是内存地址(引用传递)
Ø 指针的应用场景
让函数返回一个以上的值
直接访问硬件 (opengl 显卡绘图)
快速传递数据(指针表示地址)
表示复杂的数据结构(结构体)
方便处理字符串
指针有助于理解面向对象
• 指针就是地址,地址就是指针
• 地址就是内存单元的编号
• 指针变量是存放地址的变量
• 指针和指针变量是两个不同的概念
• 但是要注意:
通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样
#include<stdio.h>
#include<stdlib.h>
main() {
int i = 5;
//写一个一级指针
int* p = &i;
printf("p = %d \n",*p);
//二级指针
int** pi = &p;
printf("pi =%d \n",*(*pi));
printf("pi =%d \n",**pi);
//三级指针
int*** pp = & pi;
printf("pp = %d \n",***pp);
}
C之指针的更多相关文章
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
- Marshal.Copy将指针拷贝给数组
lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...
- C++智能指针
引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...
- EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...
- 智能指针shared_ptr的用法
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...
- 智能指针unique_ptr的用法
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...
随机推荐
- 【Hibernate】持久化对象状态及以及缓存
一.持久化类状态 1.1 三种持久化对象的状态 1.2 区分三种状态 1.3 三种状态对象转换 1.瞬时态 2.持久态 3.脱管态 4.持久态对象有自动更新数据库的能力 一.持久化类状态 1.1 三种 ...
- 十年阿里架构师教你如何一举拿下阿里的Offer,(附面试技巧)
前言: 现在很多人即将毕业或者换工作面临找工作,为了帮助大家,遂写下这篇文章.如果你想进入BAT,抑或拿到高工资,无论你的基础如何,你至少要花三个月时间来准备简历.笔试题.面试题.对于没有项目经验,没 ...
- 第五章、drf-JWT认证
目录 JWT认证 JWT认证方式与其他认证方式对比: 优点 格式 drf - jwt 插件 官网 安装 token的签发与校验初识: 签发token 校验token 自定义drf-jwt配置 sett ...
- linux cenos开放端口
问题:8080端口不能访问 解决方案: 第1步 查看阿里云端口是否开放 网络安全>安全组>配置规则>添加入方向 第二步 查看防火墙是否开启(只说开启了防火墙的情况) 查看防火墙状态: ...
- HCIP DAY2
OSPF协议的基本特点: 支持无类域间路由(CIDR) vlsm NA 无路由自环 收敛速度快 使用IP组播放收发协议数据 支持多条等值路由 静态路由 动态路由 等价路由 浮动路由 支持协议报文的认证 ...
- CentOS7使用Qemu模拟ARM64
准备 RPM包安装 yum安装交叉编译工具 yum install -y binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu bison flex gli ...
- ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
报错:ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问.: 'E:\\Anoconda\\ ...
- HTTP的原理和工作机制
HTTP到底是什么? 两种最直观的印象:①.浏览器地址栏输入地址,打开网页:②.Android中发送网络请求,返回对应的内容: HyperText Transfer Protocal 超文本传输协议. ...
- 大数据之路week02 Collection 集合体系收尾(Set)
1.Set集合(理解) (1)Set集合的特点 无序,唯一. (2)HashSet集合(掌握) A: 底层数据结构是哈希表(是一个元素为链表的数组) B: 哈希表底层依赖两个方法: hashCode( ...
- csrf简单明了( 转发)
https://www.daguanren.cc/post/csrf-introduction.html csrf_token = request.META.get('CSRF_COOKIE') re ...