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;

假设idch的地址分别是1000,2000,3000,因此ip,dpcp的地址是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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:虚拟局域网Vlan的划分与配置实验四——教你如何撒种子创国家
下一篇:572.另一个树的子树——LeetCode

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月25日 06时38分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章