关于c语言二级指针和指针指向数组

news/2025/1/12 19:50:28/

写这篇文章是最近碰到了这两道题目:

#include <stdio.h>int k=7;void f(int **s){ int *t=&k ;*s=t;printf("%d,%d,%d,",k,*t,**s);}main(){ int i=3,*p=&i,**r = &p ;f(r); printf("%d,%d,%d\n", i,*p,**r);}

结果:7,7,7,3,7,7

关键在于*s = t;

举个例子

#include <stdio.h>int main() {int num1 = 42;int num2 = 100;int *ptr1 = &num1;  // 一个指向 num1 的指针int **ptr2 = &ptr1;  // 一个指向 ptr1 的指针printf("num1 = %d\n", num1); // 输出 42printf("*ptr1 = %d\n", *ptr1); // 输出 42// 修改二级指针的值,使其指向 num2*ptr2 = &num2;printf("num1 = %d\n", num1); // 输出 100,因为 ptr1 现在指向了 num2printf("*ptr1 = %d\n", *ptr1); // 输出 100return 0;
}

 第二个

#include <stdio.h>int *f(int *s) {s += 1;s[1] += 6;*s++ += 7;return s;
}int main() {int a[5] = {1, 2, 3, 4, 5};int *p;p = f(&a[1]);printf("%d, %d, %d, %d", a[1], a[2], *p, p[1]);return 0;
}

首先,我们有一个整数数组 a,其初始值为 {1, 2, 3, 4, 5}

然后,在 main 函数中,我们将函数 f 应用于 a 数组的第二个元素(索引为1),也就是 &a[1]

现在,让我们一步步解释每个操作:

  1. s += 1; 将传递给函数 f 的指针 s 移动到了数组的下一个元素,即索引为2的元素。

  2. s[1] += 6; 将索引为3的元素(也就是数组 a 中的第四个元素)增加了6,所以 a[3] 变成了10。

  3. *s++ += 7; 首先,将指针 s 所指向的元素(现在是索引为2的元素,也就是 a[2])增加了7,所以 a[2] 变成了10。然后,指针 s 移动到了下一个元素,即索引为3的元素(也就是 a[3])。

  4. 主要有两个点需要知道,是s[1]等同于s+1;*s++ +=7,里面*s优先级高,*s+=之后,++是s在执行,不是*s,且++优先级在这里面最低。

3最近发现结构体可以这样赋值

#include <stdio.h>struct Point {int x;int y;
};int main() {struct Point points[3] = {{1, 2}, {3, 4}, {5, 6}};// 打印数组中的值for (int i = 0; i < 3; i++) {printf("Point %d: x = %d, y = %d\n", i, points[i].x, points[i].y);}return 0;
}


http://www.ppmy.cn/news/1107814.html

相关文章

软件测试7大误区

随着软件测试对提高软件质量重要性的不断提高&#xff0c;软件测试也不断受到重视。但是&#xff0c;国内软件测试过程的不规范&#xff0c;重视开发和轻视测试的现象依旧存在。因此&#xff0c;对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…

相机坐标系 -> 像素坐标系

代码链接&#xff1a;https://github.com/PanJinquan/python-learning-notes/blob/master/modules/utils_3d/camera_tools.py def __cam2pixel(cam_coord, f, c):"""相机坐标系 -> 像素坐标系: (f / dx) * (X / Z) f * (X / Z) / dxcx,ppx260.166; cy,ppy…

redis 常用数据结构2

目录 list LPUSH LRANGE LPUSHX RPUSH RPUSHX LPOP RPOP LINDEX LINSERT LLEN LREM LTRIM LSET BLPOP / BRPOP 编码方式 set SADD SMEMBERS SISMEMBER SPOP SCARD SRANDMEMBER SMOVE SREM SINTER SINTERSTORE SUNION SUNIONSTORE SDIFF SDIFFSTO…

leetcode分类刷题:队列(Queue)(三、优先队列用于归并排序)

1、当TopK问题出现在多个有序序列中时&#xff0c;就要用到归并排序的思想了 2、将优先队列初始化为添加多个有序序列的首元素的形式&#xff0c;再循环K次优先队列的出队和出队元素对应序列下个元素的入队&#xff0c;就能得到TopK的元素了 3、这些题目好像没有TopK 大用小顶堆…

电脑静态ip地址在哪里找

在计算机网络中&#xff0c;每台设备都需要一个唯一的IP地址来进行通信。大多数情况下&#xff0c;计算机会自动获取一个动态IP地址&#xff0c;但有时我们可能需要设置静态IP地址。然而&#xff0c;对于不太熟悉网络设置的人来说&#xff0c;找到电脑的静态IP地址可能会有些困…

科技资讯|苹果虚拟纸可在Vision Pro中为广告、书籍等提供MR内容和动画

近日&#xff0c;美国专利商标局正式授予苹果一项与虚拟纸张相关的专利。这是与虚拟纸张这项发明相关的第二项专利&#xff0c;鉴于苹果 Vision Pro 将于明年上市&#xff0c;那么我们离苹果实现虚拟纸张的发明又近了一步。 虚拟纸张将能够包含 2D、3D 和动画等 MR内容&#…

AI伦理与未来社会:探讨人工智能的道德挑战与机会

引言 引出AI伦理和社会影响的主题&#xff0c;强调AI的快速发展和广泛应用。 概述博客的主要内容&#xff1a;探讨AI的伦理挑战以及它对社会的影响。 第一部分&#xff1a;AI的伦理挑战 算法偏见&#xff1a; 解释什么是算法偏见&#xff0c;以及它为何在AI中成为一个重要问题。…

(二十七)大数据实战——hbase高可用集群安装与部署

前言 本节内容我们主要介绍HBase高可用集群的安装部署。HBase是一个开源的分布式非关系型数据库管理系统&#xff08;NoSQL&#xff09;&#xff0c;它运行在Apache Hadoop之上。它基于Google的Bigtable论文设计&#xff0c;并且具有高扩展性、高可靠性和高性能的特点。HBase通…