该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。

  指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则。本节内容中指针的操作主要包括指针的声明、指针值的获取、指针的解引、指针的打印、指针的阅读及其他内容。

一、指针的操作:

  1、指针的声明,切记指针是一种特殊变量,这种变量中没有直接存储数值,存储的数值是另外变量的地址。

    其中,看代码第6、7、8行,都是指针变量的声明,无论*的位置如何,靠近int还是变量名,还是哪个都不靠近,都可以表示,根据自己的习惯坚持即可,个人建议靠近变量名好。

  2、地址操作符,使用&获取变量地址的符号,常用来为指针变量赋值。

    其中、代码的第6、7、9行,都是地址操作符的应用

  3、指针的打印,使用%p占位符即可打印指针变量的值,另外变量的地址。

    其中、代码的第12、13、14、19、21、23行都是打印指针值的应用

  4、指针的解引用,通过指针获取指针值对应的变量的值。

    其中、代码的第12、13、14、19、21、23行都是指针解引用的应用。

  #include <stdio.h>

  int main(int argc, char **argv)
{
int iVar = ;
int *ptrVar1 = &iVar;
int* ptrVar2 = &iVar;
int * ptrVar3 = NULL;
ptrVar3 = &iVar; printf("the iVar is %d and address is %p\n", iVar, &iVar);
printf("the ptrVar1 is %p and *ptrVar1 is %d\n", ptrVar1, *ptrVar1);
printf("the ptrVar2 is %p and *ptrVar2 is %d\n", ptrVar2, *ptrVar2);
printf("the ptrVar3 is %p and *ptrVar3 is %d\n", ptrVar3, *ptrVar3); iVar++;
printf("the iVar is %d and address is %p\n", iVar, &iVar);
(*ptrVar1)++;
printf("the ptrVar1 is %p and *ptrVar1 is %d\n", ptrVar1, *ptrVar1);
(*ptrVar2)++;
printf("the ptrVar2 is %p and *ptrVar2 is %d\n", ptrVar2, *ptrVar2);
(*ptrVar3)++;
printf("the ptrVar3 is %p and *ptrVar3 is %d\n", ptrVar3, *ptrVar3); return ;
}

二、指针的补充:

  1、null在C语言中充分体现了C语言的逻辑混乱,C语言中null的出现主要和指针变量有关。

    null宏定义中被定义为: #define NULL  ((void *)0)这种定义一般在stddef.h、stdlib.h和stdio.h中出现;

    null可以用来初始化指针变量,表示指针变量指向空,也可以直接将指针变量赋值为零也可;

    null可以在字符中表示全为0的字节,表示不包含任何内容;

    null可以表示字符串表示没有任何内容;

    null语句表示只有一个;没有任何内容的语句

  2、void指针,通用指针,可以存放任何的数据类型的指针,void指针与char指针的存储和对其方式相同,void指针在使用前一般需要先强制转换下    

06深入理解C指针之---指针操作和比较的更多相关文章

  1. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  2. C语言指针的高级操作

    C语言指针的高级操作 指针  指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...

  3. 00深入理解C指针之--- 指针之外

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. C语言从诞生之初就非常善于和硬件打交道,经过这么多年的发展之后,其灵活性和超强的特征是 ...

  4. 02深入理解C指针之---指针类型和值

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 1.指针的类型: 可以在声明指针时,指定指针的类型,例如: (1)void *x  声 ...

  5. 10深入理解C指针之---指针运算和比较

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针运算有很多种,主要有指针的声明*.指针的解引*.指针指向(*).或->.指针 ...

  6. 深入理解void以及void指针的含义

    void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值. ...

  7. Windows 10开发基础——指针事件和操作事件(一)

    主要内容: 1.指针事件 2.操作事件 1.指针事件 指针事件由各种活动输入源引发,包括触摸.触摸板.笔和鼠标(它们替代传统的鼠标事件).指针事件基于单一输入点(手指.笔尖.鼠标光标),但不支持基于速 ...

  8. 深入理解C语言-函数指针

    函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作. 函数类型基础 函数三要素: 名称.参数.返回值 C语言中的函数有 ...

  9. 深入理解C语言-二级指针三种内存模型

    二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...

随机推荐

  1. CF-629 D - Babaei and Birthday Cake (离散化 + 线段树|树状数组)

    求上升子序列的最大和.O(n^2)会暴力,在查询的时候要用线段树维护 因为权值是浮点数,故先离散化一下,设第 i 个位置的权值,从小到大排名为 id.那么dp转移中 \[d[i] = max(d[i] ...

  2. 救援(BFS)

    题目描述: 在你的帮助下,Oliver终于追到小X了,可有一天,坏人把小X抓走了.这正是Oliver英雄救美的时候.所以,Oliver又找到哆啦A梦,借了一个机器,机器显示出一幅方格地图,它告诉Oli ...

  3. destoon 后台管理左侧新增菜单项

    destoon 后台菜单设置在对应模块的admin/menu.inc.php 例如要在后台会员管理里增加会员承包和股东管理 $menu = array( array('添加会员', '?modulei ...

  4. vscode 实时预览 编辑markdown 插件 Markdown Preview Enhanced

    说明地址: https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/?id=markdown-preview-enhanced

  5. foreach ($users as $key=>$value)

    1: foreach(array_name as $value) { statement; } 这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$ ...

  6. STM8 EEPROM心得

    对于STM8来说,其内部的EEPROM确实是个不错的东西,而且STM8S103/105价格已经非常便宜了,当然也可以用STM8S003/005代替,而且价格更便宜,大概在,1.2/2.0元左右,比10 ...

  7. 【转】git bash here 右键菜单失效后的修复方法

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\git_shell] @="Git Ba&sh Here"   [ ...

  8. Linux内存cache/buffer剖析

    查询linux系统中空闲内存/内存使用状态查看/剩余内存查看 如何计算内存的使用量及空闲量 物理已用内存 = 实际已用内存 - 缓冲 - 缓存              =  24752  - 283 ...

  9. 初试webpack打包

    第一次接触webpack,学习了如何用webpack打包,记录一下过程. 1.在项目根目录安装webpack $ npm install webpack --save-dev 2.新建一个webpac ...

  10. Redhat7配置yum源(本地源和网络源)

    Redhat7配置yum源(本地源和网络源)   目录 一:配置本地yum源 二:配置网络yum源 YUM(Yellow dog Updater Modified): yum是基于RPM包构建的软件更 ...