数组与指针相关

news2024/11/18 11:46:15

二级指针与指针数组

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    // 定义一个指针数组,每个元素都是一个指向int的指针  
    int *ptr_array[3];  
  
    // 为指针数组的每个元素分配内存  
    ptr_array[0] = malloc(2*sizeof(int));  
    ptr_array[1] = malloc(2*sizeof(int));  
    ptr_array[2] = malloc(2*sizeof(int));  
  
    printf("%d\n", sizeof(int));  
    printf("%d\n", sizeof(int*));  
    printf("%d\n", sizeof(ptr_array));  

 
    // 定义一个二重指针,让它指向指针数组的第一个元素  
    int **double_ptr = &ptr_array[0];  
    //赋值方式
	(double_ptr[0][0]) = 40; 
	(double_ptr[1][0]) = 50; 
	(double_ptr[2][0]) = 60; 
	(double_ptr[0][1]) = 70; 
	(double_ptr[1][1]) = 80; 
	(double_ptr[2][1]) = 90; 
	
	
    // 通过二重指针访问和打印指针数组的元素  
    for (int i = 0; i < 3; i++) {
           //指针数组中每个元素占用8字节,代表指针数组元素的地址
        printf("double_ptr[%d] points to a value of %d\n", i, &(double_ptr[0])+i);  
        printf("double_ptr[%d] points to a value of %d\n", i, (double_ptr+i));  
	   	printf("double_ptr[%d] points to a value of %d\n", i, (&double_ptr[i]));  

        //代表每行第2元素中的地址
        printf("double_ptr[%d] points to a value of %d\n", i, *(&(double_ptr[0])+i)+1);
		printf("double_ptr[%d] points to a value of %d\n", i, *(double_ptr+i)+1); 
	    printf("double_ptr[%d] points to a value of %d\n", i, (double_ptr[i]+1));  
	   	printf("double_ptr[%d] points to a value of %d\n", i, &(double_ptr[i][0])+1); 
		printf("double_ptr[%d] points to a value of %d\n", i, &(double_ptr[i][1])); 

        //代表每行第二个元素值所指空间的内容
		printf("double_ptr[%d] points to a value of %d\n", i, *(*(&(double_ptr[0])+i)+1));
		printf("double_ptr[%d] points to a value of %d\n", i, *(*(double_ptr+i)+1));
	    printf("double_ptr[%d] points to a value of %d\n", i, *(double_ptr[i]+1));
		printf("double_ptr[%d] points to a value of %d\n", i, *(&(double_ptr[i][0])+1)); 
		printf("double_ptr[%d] points to a value of %d\n", i, (double_ptr[i][1])); 

        
    }  
  
    // 释放内存  
    for (int i = 0; i < 3; i++) {  
        free(ptr_array[i]);  
    }  
  
    return 0;  
}

二维数组、及通过二级指针访问二维数组

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    int a[3][2] = {
                    {1,2},
                    {3,4},
                    {5,6}
                  };
    //&a整个数组的地址,a数组首行地址,*a数组首行第一个元素地址,**a数组第一个元素的值
    printf("%d,%d,%d,%d\n",&a, a,*a,**a);
    
    //解释方式与上条语句类似
    printf("%d,%d,%d,%d\n",&a, &a[0],&a[0][0],a[0][0]);
    
    //第一种:二维数组指针,指向整个二维数组
    int (*ptr)[3][2]=&a;
    
    //第二种:一维数组指针,指向二维数组第一行元素
    int (*ptr1)[2]=a;//or &a[0]
    
    //第三种:int *型指针,指向二维数组第一行第一列的第一个元素
    int *ptr2=&a[0][0];//or *a
    
    //第四种:二级指针与二维数组结合
    int **ptr3 = calloc(3, sizeof(int *));
    for (int i = 0; i < 3; ++i) {
       	*(ptr3+i)=*(a+i);
       	printf("%d,%d\n",*(*(ptr3+i)+0),*(*(ptr3+i)+1));
    }
    
    int **ptr4 = calloc(3, sizeof(int *));
    for (int i = 0; i < 3; ++i) {
        printf("%d,%d\n",a+i,*(a+i));
       	*(ptr4+i)=(a+i);
       	printf("%d,%d\n",*(*(ptr4+i)+0),*(*(ptr4+i)+1));
    }
    return 0;  
}

二维数组指针

#include <stdio.h>  
#include <stdlib.h>  
  
int main(int argc, char **argv) {
    //二维数组指针
    int (*ptr)[3][3] = calloc(3 * 3, sizeof(int));
    //&ptr:二维数组指针的地址
    //ptr:二维数组的首地址,代表整个数组
    //*ptr:二维数组的首行首地址,代表整行
    //**ptr:二维数组的首个元素的地址,代表数组的第一个元素
    printf("%d,%d,%d,%d\n",&ptr,ptr,*ptr,**ptr);
    //赋值
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            (*ptr)[i][j]=j;
            
        }
    }
    
    for (int i = 0; i < 3; ++i) {
        printf("%d,%d,%d\n",(*ptr)[i],(*ptr)+i,*((*ptr)+i));
    }
    
    for (int i = 0; i < 3; ++i) {
        printf("%d,%d\n",*((*ptr)[i]),**((*ptr)+i));
    }
    
    //打印
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            printf("%d", (*ptr)[i][j]);
        }
        printf("\n");
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1466956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

转运机器人,AGV底盘小车:打造高效、精准的汽车电子生产线

为了满足日益增长的市场需求&#xff0c;保持行业领先地位&#xff0c;某汽车行业电子产品企业引入富唯智能AMR智能搬运机器人及其智能物流解决方案&#xff0c;采用自动化运输措施优化生产节拍和搬运效率&#xff0c;企业生产效率得到显著提升。 项目背景&#xff1a; 1、工厂…

PyTorch概述(二)---MNIST

NIST Special Database3 具体指的是一个更大的特殊数据库3&#xff1b;该数据库的内容为手写数字黑白图片&#xff1b;该数据库由美国人口普查局的雇员手写 NIST Special Database1 特殊数据库1&#xff1b;该数据库的内容为手写数字黑白图片&#xff1b;该数据库的图片由高…

GitCode配置ssh

下载SSH windows设置里选“应用” 选“可选功能” 添加功能 安装这个 坐等安装&#xff0c;安装好后可以关闭设置。 运行 打开cmd 执行如下指令&#xff0c;启动SSH服务。 net start sshd设置开机自启动 把OpenSSH服务添加到Windows自启动服务中&#xff0c;可避免每…

mysql的日志文件在哪?

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; MySQL的日志文件通常包括错误日志、查询日志、慢查询日志和二进制日志等。这些日志文件的位置取决于MySQL的安装和配置。以下是一些常见的日志文件位置和如何找到它们&#xff…

【kubernetes】二进制部署k8s集群之,多master节点负载均衡以及高可用(下)

↑↑↑↑接上一篇继续部署↑↑↑↑ 之前已经完成了单master节点的部署&#xff0c;现在需要完成多master节点以及实现k8s集群的高可用 一、完成master02节点的初始化操作 二、在master01节点基础上&#xff0c;完成master02节点部署 步骤一&#xff1a;准备好master节点所需…

调用 Python 函数遗漏括号 ( )

调用 Python 函数遗漏括号 1. Example - error2. Example - correctionReferences 1. Example - error name "Forever Strong" print(name.upper()) print(name.lower)FOREVER STRONG <built-in method lower of str object at 0x0000000002310670>---------…

【ArcGIS】利用高程进行坡度分析:区域面/河道坡度

在ArcGIS中利用高程进行坡度分析 坡度ArcGIS实操案例1&#xff1a;流域面上坡度计算案例2&#xff1a;河道坡度计算2.1 案例数据2.2 操作步骤 参考 坡度 坡度是地表单元陡缓的程度&#xff0c;通常把坡面的垂直高度和水平距离的比值称为坡度。 坡度的表示方法有百分比法、度数…

单片机04__基本定时器__毫秒微秒延时

基本定时器__毫秒微秒延时 基本定时器介绍&#xff08;STM32F40x&#xff09; STM32F40X芯片一共包含14个定时器&#xff0c;这14个定时器分为3大类&#xff1a; 通用定时器 10个 TIM9-TIM1和TIM2-TIM5 具有基本定时器功能&#xff0c; 还具有输入捕获&#xff0c;输出比较功…

yarn install:unable to get local issuer certificate

一、问题描述 今天在Jenkins上发布项目时&#xff0c;遇到一个报错&#xff1a; error Error: unable to get local issuer certificateat TLSSocket.onConnectSecure (node:_tls_wrap:1535:34)at TLSSocket.emit (node:events:513:28)at TLSSocket._finishInit (node:_tls_w…

PLC_博图系列☞基本指令“取反RLO”

PLC_博图系列☞基本指令“取反RLO” 文章目录 PLC_博图系列☞基本指令“取反RLO”背景介绍取反RLO说明示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 取反RLO 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件。我并不是专业的PLC…

谷歌Gemma开源了

1、Gemma的表现 自从大模型横空出世之后&#xff0c;大部分大模型都是闭源的&#xff0c;只有少部分模型选择开源。谷歌推出了全新的开源模型系列Gemma&#xff0c;相比谷歌之前的 Gemini模型&#xff0c;Gemma 更加轻量&#xff0c;可以免费使用&#xff0c;模型权重也一并开…

详解编译和链接!

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理 2.2 编译 2.3 汇编 2.4 链接 3. 运行环境 4.完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们…

Vue+SpringBoot打造开放实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

多窗口编程

六、多窗口编程 QMessageBox消息对话框&#xff08;掌握&#xff09; QMessageBox继承自QDialog&#xff0c;显示一个模态对话框。用于用户前台信息通知或询问用户问题&#xff0c;并接收问题答案。 QDialog的Qt源码中&#xff0c;派生类往往都是一些在特定场合下使用的预设好的…

【Vuforia+Unity】AR03-圆柱体物体识别(Cylinder Targets)

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意&#xff0c;您不必上传所有三个部分的图片&#xff0c;但您需要先为侧面曲面关联一个图像&#…

Threejs 实现3D影像地图,Json地图,地图下钻

1.使用threejs实现3D影像地图效果&#xff0c;整体效果看起来还可以&#xff0c;底层抽象了基类&#xff0c;实现了通用&#xff0c;对任意省份&#xff0c;城市都可以只替换数据&#xff0c;即可轻松实现效果。 效果如下&#xff1a; 链接https://www.bilibili.com/video/BV1…

[AutoSar]BSW_Com1 Can通信入门

目录 关键词平台说明一、车身CAN简介二、相关模块三、Can报文分类及信号流路径3.1 应用报文3.2 应用报文&#xff08;多路复用multiplexer&#xff09;3.3 诊断报文3.4 网络管理报文3.5 XCP报文&#xff08;标定报文&#xff09; 关键词 嵌入式、C语言、autosar、OS、BSW 平台…

分散的产品开发团队

分散的产品开发团队指的是各个团队或成员在地理位置上分布在不同地方&#xff0c;通过互联网和现代通讯技术进行协作和沟通&#xff0c;以共同完成产品开发任务的团队模式。 这种团队模式的优势在于可以充分利用各地的人才资源&#xff0c;降低团队的管理和协作成本&#xff0…

RobotGPT:利用ChatGPT的机器人操作学习框架,三星电子研究院与张建伟院士、孙富春教授、方斌教授合作发表RAL论文

1 引言 大型语言模型&#xff08;LLMs&#xff09;在文本生成、翻译和代码合成方面展示了令人印象深刻的能力。最近的工作集中在将LLMs&#xff0c;特别是ChatGPT&#xff0c;整合到机器人技术中&#xff0c;用于任务如零次系统规划。尽管取得了进展&#xff0c;LLMs在机器人技…

VSCODE使用Django 页面和渲染

https://code.visualstudio.com/docs/python/tutorial-django#_use-a-template-to-render-a-page 通过模板渲染页面 文件 实现步骤 1&#xff0c; 修改代码&#xff0c;hello的App名字增加到installed_apps表中。 2&#xff0c; hello子目录下&#xff0c;创建 .\templates\…