06深入理解C指针之---指针操作和比较
该系列文章源于《深入理解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指针之---指针操作和比较的更多相关文章
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- C语言指针的高级操作
C语言指针的高级操作 指针 指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...
- 00深入理解C指针之--- 指针之外
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. C语言从诞生之初就非常善于和硬件打交道,经过这么多年的发展之后,其灵活性和超强的特征是 ...
- 02深入理解C指针之---指针类型和值
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 1.指针的类型: 可以在声明指针时,指定指针的类型,例如: (1)void *x 声 ...
- 10深入理解C指针之---指针运算和比较
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针运算有很多种,主要有指针的声明*.指针的解引*.指针指向(*).或->.指针 ...
- 深入理解void以及void指针的含义
void的含义 void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值. ...
- Windows 10开发基础——指针事件和操作事件(一)
主要内容: 1.指针事件 2.操作事件 1.指针事件 指针事件由各种活动输入源引发,包括触摸.触摸板.笔和鼠标(它们替代传统的鼠标事件).指针事件基于单一输入点(手指.笔尖.鼠标光标),但不支持基于速 ...
- 深入理解C语言-函数指针
函数指针在C++中有着重要的应用,函数的函数名其本质就是代表一个地址,这个地址叫做函数入口,得到这个地址就可以对这个函数进行各种操作. 函数类型基础 函数三要素: 名称.参数.返回值 C语言中的函数有 ...
- 深入理解C语言-二级指针三种内存模型
二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...
随机推荐
- 在Keras中导入测试数据的方法
https://blog.csdn.net/ethantequila/article/details/80322425?utm_source=blogxgwz2
- 初涉网络流[EK&dinic]
主要还是板子 Edmonds-Karp 从S开始bfs,直到找到一条到达T的路径后将该路径增广,并重复这一过程. 在处理过程中,为了应对“找到的一条路径把其他路径堵塞”的情况,采用了建反向弧的方式来实 ...
- php加密解密函数大全
第一种: <?php function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcr ...
- 【jquery】 选中复选框 和 return false 的影响
$('id').attr('checked',true); return false; 如果后面接上return false 的话,复选框的钩钩不会改变,但是.is(':checked')仍然能检 ...
- yagmail 邮箱的使用
文章来源:GITHub:https://github.com/kootenpv/yagmail 安装 pip3 install yagmail pip3 install keyring 简单例子 im ...
- python hashlib模块学习
目录 hashlib 模块 破解密码 hmac 模块 hashlib 模块 1.干嘛用的: 对字符进行加密,其实就是一个自定义的字符编码表,我们原来接触的是计算机语言0和1然后转化成字符,而hashl ...
- Java多线程之Deque与LinkedBlockingDeque深入分析
有大小的队列就叫有界队列 如 ArrayBlockingquue, 反之是无界队列 如 LinkedBlockingDeque. 单词写错了. 是的,LinkedBlockingDeque 永远满不 ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set
Let's consider some math problems. JSZKC has a set A=A={1,2,...,N}. He defines a subset of A as 'Meo ...
- The 2018 ACM-ICPC Chinese Collegiate Programming Contest Take Your Seat
/* 证明过程如下 :第一种情况:按1到n的顺序上飞机,1会随意选一个,剩下的上去时若与自己序号相同的座位空就坐下去,若被占了就也会随意选一个.求最后一个人坐在应坐位置的概率 */ #include ...
- poj 1017 装箱子问题 贪心算法
题意:有1*1到6*6的的东西,需要用6*6的箱子将它们装起来.问:至少需要多少个6*6箱子 思路: 一个瓶子怎么装东西最多?先装石头,在装沙子,然后装水. 同样放在本题就是先装6*6然后5*5... ...