关于C指针
地址概念:内存基本单元是一个字节,一个字节8个位。在定义变量的时候,如int a=10;系统为变量a分配2个字节空间:1000~1001,并在1001~1002中存有数据10。内存中没有变量a,只有1000~1001这个地址,所以使用a的时候,拿出这个地址中的值就行了。
寻址方式:分两种
1、直接寻址:
如printf("%d",a);系统找到1000~1001这个地址,取出其中存的值。
2、间接寻址(指针):
在一个新的地址2010~2011中存放a的起始地址1000,使用a的时候,在2010中取出a的地址1000,再从1000中取出a的值。
指针类型:
1、变量指针:
就是一个变量的地址,a的指针就是1000。值是地址。
2、指针变量:
全名是指向变量的指针变量。一个变量专门用来存放另一个变量的地址(即指针),则这个变量称为指针变量。如定义一个变量ap=2010,则ap就是一个指针变量。
值是指针。(我们需要理解的是指针变量)
*运算和&运算:
在定义指针变量的时候需要用到*符号:
int a;int *ap;
a=10;ap=&a;//&是取地址运算,将a的地址1000取出,赋值给指针变量
a=*ap;//*是指针运算符(我理解是取值运算符),先取出a变量存的值1000,再取出地址为1000的值,将这个值赋值给变量a。
总结:*ap==a;
&*ap==&a;
*&a==a;
(*ap)++==a++;
指向数组的指针变量:
数组的指针就是数组的起始地址;用一个变量来存放一个数组的起始地址,这个变量就是指向数组的指针变量。
int a[10];int *app;//定义
app=&a[0];app=a;//赋值,通常用后面一种

总结:app=a;
app+i==a+i//就是a[i]的地址
*(app+i)==*(a+i)//对应的值
数组指针变量可以带下标,app[i]==*(app+i)
关于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 ...
随机推荐
- PAT乙级 1007. 素数对猜想 (20)
1007. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 dn 为:dn = ...
- PAT乙级 1004. 成绩排名 (20)
1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...
- session讲解(一)——登录网页练习
第一:登陆网页的表单页面login.php <body> <h1>登陆</h1> <form action="loginchuli.php" ...
- java中的拷贝(二)深克隆
浅拷贝(Object类中的clone()方法)是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝. 深拷贝(或叫深克隆) 则是对对象及该对象关联的对象内容, ...
- Junit单步调试
单步调试:主要查看变量内容的变化 1.设置断点位置,设置在可能出现问题的代码 2.点击项目右键以Debug as方式运行程序 3.F5 --> step into 进入方法内部进行调试 ...
- !important------至高无上的宝剑
如上图,不同来源的两个样式,第一个样式设置了font-weight,第二个没有,浏览器会把它叠加在一起,即浏览器会把各个零散的整合成一个整体.第一个样式color:red,第二个样式color:blu ...
- In_interrupt( ) 和In_irq( )【转】
转自:http://blog.csdn.net/do2jiang/article/details/5486888 in_interrupt() 是判断当前进程是否处于中断上下文,这个中断上下文包括底半 ...
- JavaScript中统计Textarea字数并提示还能输入的字符
<span style="font-size:18px;"><script language="javascript"> functio ...
- WKWebView新特性及JS交互
引言 一直听说WKWebView比UIWebView强大许多,可是一直没有使用到,今天花了点时间看写了个例子,对其API的使用有所了解,为了日后能少走弯路,也为了让大家更容易学习上手,这里写下这篇文章 ...
- JavaEE基础(二十六)/网络
1.网络编程(网络编程概述) A:计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信 ...