C语言指针——每天一遍小概念
发布日期:2021-06-29 14:17:42
浏览次数:3
分类:技术文章
本文共 2236 字,大约阅读时间需要 7 分钟。
前言
这是我在整理的笔记,关注我,接下来还会持续更新。
作者:RodmaChen
C语言指针
一.介绍
1.关于地址
(1)C语言可以轻松访问内存位置并执行与内存相关的操作。
(2)内存地址以十六进制数给出。(十六进制:是一个以16为底的数字系统,它使用数字0到9和字母A到F(16个字符)代表一组四个二进制数字,其值可以从0到15。) (3)它更容易阅读一个16位数字的8位十六进制数,用于32位内存,而不是尝试用二进制破译32位1和0。2.什么是指针
(1)作用:轻松地处理内存位置,它是数组,字符串以及其他数据结构和算法的基础。
(2)指针是包含可变地址另一个变量。换句话说,它“指向”分配给变量的位置,并且可以间接访问该变量。• 在将指针分配给有效位置之前,应将其初始化为NULL。
• 可以使用&符号为指针分配变量的地址。 • 要查看指针指向的内容,请再次使用*,如* p所示。在这种情况下,*被称为间接或取消引用运算符。该过程称为解引用。列:
int j = 63; int * p = NULL; p =&j; printf(“ j的地址是%x \ n”,&j); printf(“ p包含地址%x \ n”,p); printf(“ j的值为%d \ n”,j);printf(“ p指向值%d \ n”,* p);
输出:
j的地址是ff3652cc p包含地址ff3652cc p 的值是63 p指向值63
二.指针和数组
使用指针,我们可以指向第一个元素,然后使用地址算法遍历数组:
+
用于向前移动内存位置
-
用于向后移动内存位置 列: int a[5] = { 22, 33, 44, 55, 66};int *ptr = NULL;int i;ptr = a;for (i = 0; i < 5; i++) { printf("%d ", *(ptr + i));}
数组名称充当指向数组第一个元素的指针。因此,语句ptr = a
可以认为是ptr =&a [0]
。
增量运算符
(ptr ++)
时,指针会增加4,因为指针指向一个int。
三.指针与函数
指针大大扩展了功能的可能性。我们不再局限于返回一个值。使用指针参数,您的函数可以更改实际数据,而不是数据副本。
指针交换功能事列:
void swap (int *num1, int *num2);int main() { int x = 25; int y = 100; printf("x is %d, y is %d\n", x, y); swap(&x, &y); printf("x is %d, y is %d\n", x, y); return 0;} void swap (int *num1, int *num2) { int temp; temp = *num1; *num1 = *num2; *num2 = temp;}
四.指针的算法
适用于指针的唯一有效算术运算是:
- 将整数加到指针
- 整数减指针
- 减去两个相同类型的指针
我们来举个列子:
int i = 11, *ip = &i;double d = 2, *dp = &d;char ch = 'a', *cp = &ch;
假设:i
,d
和ch
的地址分别是1000,2000,3000
,因此ip,dp
和cp
的地址是1000,2000,3000
。
整数的指针算术
指针表达 | 如何评估? |
---|---|
ip++ 要么 ++ip | ip++=> ip + 1=> 1004 + 1*4=>1008 |
ip = ip + 5 | ip=> ip + 5=> 1008 + 5*4=>1028 |
ip = ip - 2 | ip=> ip - 2=> 1028 - 2*4=>1020 |
ip-- 要么 --ip | ip=> ip + 2=> 1020 + 2*4=>1028 |
浮点指针算法
指针表达 | 如何评估? |
---|---|
dp + 1 | dp = dp + 1=> 2000 + 1*8=>2008 |
dp++ 要么 ++dp | dp++=> dp+1=> 2008+1*8=>2016 |
dp = dp + 5 | dp=> dp + 5=> 2016+5*8=>2056 |
dp-- 要么 --dp | dp=> dp - 1=> 2040-1*8=>2032 |
字符指针算法
指针表达 | 如何评估? |
---|---|
cp + 1 | cp = cp + 1=> 97 + 1*1=>98 |
cp++ 要么 ++cp | cp=> cp + 1=> 98 + 1*1=>99 |
cp = cp +5 | cp=> cp + 5=> 99 + 5*1=>104 |
cp = cp-2 | cp=> cp -2=> 104 - 2*1=>102 |
cp-- 要么 --cp | cp=> cp -1=> 102 - 1*1=>101 |
当我们通过增加或减少数字来递增和递减指针变量时,指针变量仍不指向有效的存储位置。因此,当我们以这种方式移动指针时,我们必须始终特别注意。通常情况下,我们对数组使用指针算法,因为数组的元素排列在连续的内存位置中。
作者:RodmaChen
本人博客:https://blog.csdn.net/weixin_46654114 qq:1342709867 转载说明:务必联系我,注明来源,附带本人博客连接。谢谢配合。
请给我点个赞鼓励我吧
转载地址:https://chenyunzhi.blog.csdn.net/article/details/105999060 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月25日 06时38分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++中MessageBox的常见用法
2019-04-29
ordfilt2函数功能说明
2019-04-29
在图像变换中用最小二乘法求解仿射变换参数
2019-04-29
软件包应用分享|基于RT-Thread的百度语音识别(一)
2019-04-29
12月8日 RCEA - RT-Thread能力认证考试考前通知
2019-04-29
论坛热贴 | RT-Thread音频驱动开发(一)
2019-04-29
基于 Keil MDK 移植 RT-Thread Nano
2019-04-29
【报名截至今晚】12月14日深圳嵌入式与音频开发专题会议预告
2019-04-29
移植 RT-Thread Nano 到 RISC-V
2019-04-29
软件包应用分享|基于RT-Thread的百度语音识别(二)
2019-04-29
在 RT-Thread Nano 上添加控制台与 FinSH
2019-04-29
一站式开发工具:RT-Thread Studio 正式发布
2019-04-29
留言有礼|谢谢你悄悄点了小星星,让我们跃居GitHub RTOS Star榜第一
2019-04-29
功能更新!C 函数也能在 MicroPython 中被调用啦
2019-04-29
东软载波携ES32+RT-Thread走进海尔集团
2019-04-29
今晚8点直播预告:RT-Thread Studio等相关主题答疑
2019-04-29
物联网 20 年简史大揭秘!
2019-04-29
开源项目|RT-Thread 软件包应用作品:水墨屏桌面台历
2019-04-29
珠联璧合!基于i.MX RT和RT-Thread的物联网云接入方案
2019-04-29