C的指针疑惑:C和指针6(指针)
NULL:
对所有指针变量进行显式的初始化是种好事:(1)如果你知道指针将被初始化为什么地址,就直接初始化该地址,
(2)否则把它初始化位NULL.
注意:假定变量a存储于位置100.
× =
看上去像是把25赋值给a,因为a是位置100所存储的变量。但这是错误的,这条语句是非法的。因为字面值100的类型是整形,而间接访问操作只能作用于指针类型表达式。
正确:
×(int ×) =
强制类型转换把值100从“整形”转换为“指向整形的指针”
这种技巧运行之处:你偶尔需要通过地址访问内存中某个特定的位置。
前缀++:先增加它的操作数的值再返回这个结果。
后缀++:先返回cp值的一份copy,然后再增加cp的值。
易错点:
char ch = 'a'
char *cp = &ch;
此时的×cp++代表什么????
结果是:它的右值和左值分别是变量ch的值和ch的内存位置,也就是cp原先所指。
定人误解的地方:后缀++操作符的优先级高于*操作符。但表达式结果看上去是像先执行间接访问操作。
实际:这里有三个步骤
(1)++操作符产生cp的一份拷贝
(2)然后++操作符增加cp的值
(3)最后在cp的拷贝上执行间接访问操作。
*cp++:这个表达式常常在循环中出现,首先用一个数组的地址初始化指针,然后使用这种表达式就可以依次访问该数组的内容了。
#include <stdio.h>
#include <stdlib.h>
size_t strlen_test(char *string)
{
int length = ; while(*string++ != '\0')
length += ;
return length;
} int main(void)
{
int rec= ;
char *m_string = "I am liuxj";
rec = strlen_test(m_string); printf("rec is %d\n", rec); }
C语言中存储一个字符串:
(1):字符指针
(2):使用字符数组
const char *str = "hello";
const char str[] = "hello";
两个指针相减(前提:两个指针指向同一个数组中的元素)的结果:是两个指针在内存中的距离(以数组元素的长度位单位,而不是以字节位单位),因为减法运算的结果将除以数组元素类型的长度。
两个指针的关系运算: <, <=, >, >=
比较将会告诉你,哪个指针指向数组中更前或更后的元素。
C的指针疑惑:C和指针6(指针)的更多相关文章
- c语言指针疑惑[转载]
c99的动态数组是在栈上面开辟的,而new出来的是在堆上面开辟的.栈和堆的地址是从两端相向增长的.栈很小,一般只有几十k,vc6好像是64k.堆很大,在win32的虚拟地址空间可以分配到2g的内存.栈 ...
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- Java中到底有没有指针;同时注意引用和指针的区别
Java中引用的作用类似于指针,但是有区别:() (1) 指针必然指向一个内存地址,如果你定义的时候不指定,就会乱指(很可能造成安全隐患)但是引用定义出来后默认指向为空. (2) 指针可 ...
- [转] C++指针加整数、两个指针相减的问题
http://blog.csdn.net/onlyou930/article/details/6725051 说来惭愧,写C++有一段时间了.这个问题从来没有认真考虑过,此次标记于此: 考虑如下问题: ...
- c++中多态性、dynamic_cast、父类指针、父类对象、子类指针、子类对象
c++多态性是依靠虚函数和父类指针指向子类对象来实现的.简单来说,父类中定义虚函数,父类指针指向子类对象,父类指针调用函数时调用的就是子类的函数. 父类没有定义虚函数,父类指针指向子类对象时,父类指针 ...
- Android系统智能指针的设计思路(轻量级指针、强指针、弱指针)
本博客为原创,转载请注明出处,谢谢. 参考博文:Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 C++中最容易出错的地方莫过于指针了,指针问题主要有两类,一是内存泄露,二是无 ...
- 在删除一个指针之后,一定将该指针设置成空指针(即在delete *p之后一定要加上: p=NULL)
在删除一个指针之后,一定将该指针设置成空指针(即在delete *p之后一定要加上: p=NULL)
- C++二维数组、指针、对象数组、对象指针
项目中用到,随手记一下: 1.二维数组.与指针 创建二维数组指针的方式: a.已知一维的大小 1 int **array=new int *[rows]; 2 (for int i=0;i<ro ...
- [C++]数组指针,数组引用,函数指针
数组指针是指一个指向数组的指针,例如有一个数组指针p指向一个数组a[],则 *p是取到这个数组,也就是说 *p=a,因此 **p =a[0], 它的定义为: ]; ]=&a; (*c)表示它是 ...
- C和C指针小记(十七)-使用结构和指针-链表
1.链表 链表(linked list)即使是一些包含数据的独立数据结构的(Node)集合. 链表中的每个节点通过链或指针链接在一起. 程序通过指针访问链表中的节点. 节点通常是动态分配的,但也有由节 ...
随机推荐
- 专题实验 Toad 用户的创建与管理( 包括 role 等 )
1. 用户登录数据库 是否可以通过操作系统权限来登录数据库, $ORACLE_HOME/network/admin/sqlnet.ora 这个文件中设置, 如果增加参数sqlnet.authentic ...
- HeadFirst jsp 08 无脚本JSP
web页面设计人员真的必须懂 java ? web页面人员可以很快学习 EL 语言. 目前不知道 EL 应用前景如何, 但是我们香港系统没有使用 EL. include 指令 include指令告诉容 ...
- ThinkPHP 汉字转成多种形式拼音
模型: <?php namespace Admin\Model; use Think\Model; /** * 汉字转拼音 * @author huangguojin */ class ZHMo ...
- EasyUI Window和Layout
我们建立tabs内容. <div class="easyui-window" title="Layout Window" icon="icon- ...
- 如何在ChemDraw中打出符号π
很多人日常使用ChemDraw是一款非常优秀的化学绘图软件,在其绘制化学结构式或者反应式的过程中,常常需要添加各种符号.比如有的用户会需要输入希腊字符π,但是不知道用什么方法添加.本教程就来给大家介绍 ...
- js获取表单数据
var modelObj = {}; var modelFieldsArray = $('#AddMusicCategory').serializeArray(); $.each(modelField ...
- THINKPHP5判断当前浏览器请求方式
作用 代码 是否为 GET 请求 if (Request::instance()->isGet()) 是否为 POST 请求 if (Request::instance()->isPost ...
- jQuery插件手把手教会(一)
jQuery插件开发教程 ——让你的jQuery水平提升一个台阶 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台 ...
- leetcode -- Best Time to Buy and Sell Stock III TODO
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- poj_2479 动态规划
题目大意 给定一列数,从中选择两个不相交的连续子段,求这两个连续子段和的最大值. 题目分析 典型的M子段和的问题,使用动态规划的方法来解决. f[i][j] 表示将A[1...i] 划分为j个不相交连 ...