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 ...
随机推荐
- C和指针--高级声明
1. int *f(); 分析:必须确定表达式*f()是如何进行求值的.首先执行的是函数调用操作符(),因为它的优先级高于间接访问操作符.因此,f是一个函数,它的返回值类型是一个指向整型的指针. 2. ...
- Linux命令——umask、setuid、setgid、sticky bit、chmod、chown
umask 权限遮罩码,用于控制文件,文件夹的默认权限 文件默认权限: 666-umask 文件夹默认权限: 777-umask 管理员root: umask= ...
- 【问题】XShell连接不上Debian root用户
类似文章:https://www.lianst.com/3231.html 修改此文件 重启ssh服务 ssh restart有问题,换一条命令OK 你的Linux发行版可能不一样,针对CentOS参 ...
- NORDIC 烧录BLE协议栈后不能用JLINK仿真bootloader问题及修改方案
问题原因: bootloader的程序区域是0X78000~0X7E000 但是在bootloader程序中定义了0X0FF8与0XFFC位置处的数据,此数据与BLE协议栈冲突,BLE协议栈的flas ...
- EF Migraiton错误解决
System.Runtime.Serialization.SerializationException: Type is not resolved for member 'Oracle.Managed ...
- NLP学习(1)---Glove模型---词向量模型
一.简介: 1.概念:glove是一种无监督的Word representation方法. Count-based模型,如GloVe,本质上是对共现矩阵进行降维.首先,构建一个词汇的共现矩阵,每一行是 ...
- Jupyter的学习
一 .Jupyter中的魔术命令 %load test.py :”可以将test.py 中的文件加载到jupyter框中 %matplotlib inline :可以将Matplotlib 的结果嵌 ...
- uhd镜像重新安装
USRP LW-X300连接网口,设置IP地址:192.168.10.1,子网验码:255.255.255.0 连接后uhd_usrp_probe提示更新镜像. 终端输入: uhd_image_loa ...
- python panda读写内存溢出:MemoryError
pandas中read_xxx的块读取功能 pandas设计时应该是早就考虑到了这些可能存在的问题,所以在read功能中设计了块读取的功能,也就是不会一次性把所有的数据都放到内存中来,而是分块读到内存 ...
- 了解 Spring Boot
Spring Boot是什么,解决哪些问题? SpringBoot是伴随着Spring4.0诞生的: 从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架: S ...