关于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 ...
随机推荐
- 【cube】SSAS(分析服务)优化手册
优化前注意事项 1.数据质量.数据仓库中维度表的数据质量要严格保证.比如店仓的大区.省区.管理城市等属性和店仓代码没有一对多的上下级关系,这样在设计店仓维度时,就无法建立有效的层次结构.这会拖慢查询时 ...
- c#读取INI文件类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;na ...
- Android SDK Manager更新报错
错误log: Fetching https://dl-ssl.google.com/android/repository/addons_list-.xml Fetched Add-ons List s ...
- 试用版SQL Server 2008 R2 提示评估期已过
解决SQL Server 2008提示评估期已过第一步:进入SQL2008配置工具中的安装中心第二步:再进入维护界面,选择版本升级第三步:进入产品密钥,输入密钥第四步:一直点下一步,直到升级完毕.SQ ...
- 使用 TC 对LInux中vpn 上传下载进行限速(转)
TC 无需安装,Linux 内核自带 例:将vpn IP地址段192.168.1.0/24 上传下载限速为 5M 将以下内容添加到/etc/ppp/ip-up文件exit 0上面. down=5Mbi ...
- uploadify3.2.1加载时,报NetworkError 404 Not Found或NetworkError forbidden错误
我用的uploadify的版本是3.2.1 在打开配置了uploadify的页面的时候,什么操作都没有,仅仅是打开了页面,在火狐里可以看到一行报错信息,我的uploadify页面 在"/项目 ...
- Java生产者和消费者问题
容器类Box.java public class Box { private int num = 0; public void put(){ if(num==10){ try { System.out ...
- CDN流量放大攻击思路
首先,为了对CDN进行攻击,我们必须清楚CDN的工作原理,这里我们再来简单介绍一下CDN的工作模型. CDN的全称是Content Delivery Network(内容分发网络),通过在网络各处的加 ...
- nginx源码安装
1,首先解决系统环境: 安装rpm包组{CentOS6 跟开发相关的包组:} a. Development Tools #yum groupinstall "Development Too ...
- Linux I2C工具查看配置I2C设备【转】
转自:http://blog.chinaunix.net/uid-26895763-id-3478882.html 在處理音訊相關的問題時,我通常會找個方法來讀寫codec中register的值.幸好 ...