当前位置: 首页 > news >正文

test_2_27(C指针)

test_2_27

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>使用指针数组来模拟实现二维数组int main()
{int* arr[10];//指针数组int arr1[] = { 1,2,3,4,5 };int arr2[] = { 2,3,4,5,6 };int arr3[] = { 3,4,5,6,7 };int* arr[3] = {arr1, arr2, arr3};int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 5; j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;
}int main()
{char ch = 'w';char* pc = &ch;printf("%c\n", *pc);*pc = 'q';printf("%c\n", ch);return 0;
}int main()
{int a = 20;a = 200;3 = 5;const char * p = "hello world";printf("%c\n", *p);*p = 'q';//errreturn 0;
}#include <string.h>int main()
{const char* p = "hello world";printf("%s\n", p);printf("%s\n", "hello world");int len = strlen(p);int i = 0;for (i = 0; i < len; i++){printf("%c", *(p + i));}return 0;
}int main()
{char arr[] = "abcdef";char* p = arr;printf("%s\n", arr);printf("%s\n", p);return 0;
}#include <stdio.h>int main()
{char str1[] = "hello bit.";char str2[] = "hello bit.";const char* str3 = "hello bit.";const char* str4 = "hello bit.";if (str1 == str2)printf("str1 and str2 are same\n");//1elseprintf("str1 and str2 are not same\n");//2if (str3 == str4)printf("str3 and str4 are same\n");//3elseprintf("str3 and str4 are not same\n");//4return 0;
}int main()
{int * p;int* * pp;int arr[10] = {0};int (*p)[10] = &arr;//取出的是数组的地址p应该是数组指针,p指向的是数组,数组10个元素,每个元素的类型是intreturn 0;
}int main()
{int* ptr;char arr[5];char (*p)[5] = &arr;//p是数组指针char (*)[5] 是数组指针类型char* arr[5];char* (*p)[5] = &arr;return 0;
}int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){printf("%d ", *(p + i));}return 0;
}int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int (* p)[10] = &arr;int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){//printf("%d ", (*p)[i]);printf("%d ", (*p)[i]);//           (*&arr)[i]//              arr[i]}return 0;
}数组指针,会在二维数组中使用void test(int arr[3][5], int r, int c)
{int i = 0;for (i = 0; i < r; i++){int j = 0;for (j = 0; j < c; j++){printf("%d ", arr[i][j]);}printf("\n");}
}void test(int (*p)[5], int r, int c)
{int i = 0;for (i = 0; i < r; i++){int j = 0;for (j = 0; j < c; j++){printf("%d ", *(*(p + i)+j));}printf("\n");}
}int main()
{int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };test(arr, 3, 5);return 0;
}int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}int Add(int a, int b)
{return a + b;
}int* test(char* s)
{return NULL;
}//函数指针变量的写法给数组指针变量的写法非常类似
int main()
{int* (*pt)(char*) = test;int arr[8] = {0};int (*pa)[8] = &arr;//pa是数组指针变量int (*pf)(int, int) = &Add;//pf 就是函数指针变量int x = 10;int y = 20;int z = Add(x, y);printf("%d\n", z);printf("%p\n", &Add);printf("%p\n", Add);//&函数名和函数名都表示函数的地址return 0;
}int Add(int a, int b)
{return a + b;
}int main()
{int (* pf1)(int, int) = &Add;int (* pf2)(int, int) = Add;int r1 = (*pf1)(3, 7);int r2 = (*pf2)(3, 7);int r3 = Add(3, 7);printf("%d\n", r1);printf("%d\n", r2);printf("%d\n", r3);return 0;
}函数声明
函数调用
void (*p)();
0x0012ff40《C陷阱和缺陷》
int main()
{(* ( void (*)() ) 0 )();//函数调用// 1. 将0强制类型转换成void (*)()类型的函数指针// 2. 调用0地址处放的这个函数return 0;
}函数声明
声明的函数的名字叫:signal
signal函数有2个参数,第一个参数的类型是int
第二个参数的类型是void(*)(int)的函数指针类型,该指针可以指向一个函数,指向的函数参数是int,返回类型是void
signal函数的返回类型是void(*)(int)的函数指针,该指针可以指向一个函数,指向的函数参数是int,返回类型是voidvoid (* signal(int, void(*)(int) ) )(int);
void (*)(int) signal(int, void(*)(int));//errtypedef unsigned int uint;int main()
{unsigned int num1;uint num2;return 0;
}typedef 对指针类型重命名typedef int* pint;int main()
{int* p1 = NULL;pint p2 = NULL;return 0;
}typedef int(*parr_t)[5] ;
//parr_t 等价于 int(*)[5]int main()
{int arr[5] = {0};int (* p)[5] = &arr;//p是数组指针变量,p是变量的名字//int (*)[5] -- 数组指针类型parr_t p2 = &arr;return 0;
}void test(char* s)
{}//对函数指针类型重命名产生新的类型pf_t
typedef void (*pf_t)(char*) ;int main()
{void (*pf)(char*) = test;//void (*)(char*)pf_t pf2 = test;return 0;
}void (*signal(int, void(*)(int)))(int);//简化后的代码
typedef void(*pf_t)(int);
pf_t signal2(int, pf_t);typedef int* ptr_t;#define PTR_T int*int main()
{//ptr_t p1;//p1是整型指针//PTR_T p2;//p2是整型指针ptr_t p1, p2;//p1, p2是整型指针PTR_T p3, p4;//p3是指针,p4是整型//int *p3, p4;return 0;
}

相关文章:

test_2_27(C指针)

test_2_27 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>使用指针数组来模拟实现二维数组int main() {int* arr[10];//指针数组int arr1[] { 1,2,3,4,5 };int arr2[] { 2,3,4,5,6 };int arr3[] { 3,4,5,6,7 };int* arr[3] {arr1, arr2, arr3};int i 0;for …...

设计模式——门面模式 | 外观模式

哈喽&#xff0c;各位盆友们&#xff01;我是你们亲爱的学徒小z&#xff0c;今天给大家分享的文章是设计模式的——门面模式。 文章目录 定义通用类图1.通用结构2.优点3.缺点 使用场景注意事项1.一个子系统可以有多个门面2.门面不参与子系统内的业务逻辑 定义 定义&#xff1a;…...

FPGA时序分析和约束学习笔记(1、FPGA基本原理)

FPGA时序分析和约束学习笔记-&#xff08;1、FPGA基本原理&#xff09; Field现场Programmable可编程Gate门Array阵列 1、FPGA基本资源组成 可编程逻辑功能块&#xff08;logic elements &#xff0c;缩写LE&#xff09; 片内互联线&#xff08;interconnect&#xff0c;缩写…...

VMware桥接模式无法连接网络

windows下打开控制面板&#xff0c;找到WLAN&#xff0c;记住下面的名称&#xff08;带有VMware的都是虚拟机的网卡&#xff0c;要找到物理主机的网卡&#xff09; 回到VMware&#xff0c;编辑——打开虚拟网络编辑器 桥接选择上面的WLAN下的网络名称&#xff0c;确定即可。&…...

YOLO11改进|卷积篇|引入空间通道重组卷积ScConv

目录 一、【SCConv】卷积1.1【SCConv】卷积介绍1.2【SCConv】核心代码 二、添加【SCConv】卷积2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【SCConv】卷积 1.1【SCConv】卷积介绍 SCConv 模块提供了一种新的视角来看待CNNs的特征提取…...

Java:方法详解

目录 一.什么是方法(method) 二.方法定义 三.方法中实参和形参的关系 四.方法重载 五.递归 一.什么是方法(method) 方法就是一个代码片段&#xff0c;再C语言中我们曾经学过一个类似的方式——函数&#xff0c;他们都是将具有独立功能的代码组织成一个整体&#xff0c;形成…...

Python 三方库下载安装

Python 三方库下载安装 1、在线安装 pip install pandas # 直接安装 python -m pip install pandas # 使用指定Python中的pip进行安装 pip install pandas1.2.3 # 安装指定版本 pip install pandas -i http://pypi.douban.com/simple --trusted-host pypi.…...

使用npm i报错node-sass失败问题解决

node 版本&#xff1a;v14.15.4 解决方法&#xff1a; npm config set sass_binary_sitehttps://npmmirror.com/mirrors/node-sass设置完之后&#xff0c;再npm i 就可以下载成功 亲测有效...

vite+vue3实现动态路径导入

最近在做一个项目有个需求: 项目图片分为英语,中文,德语 ,我将这些图片存放到/image/language/下面的每个语言的文件夹内,如en,zh-cn文件夹下面存放对应的语言的图片,如果在代码里面写路径的话,除了要写一堆路径还要判断不同的语言,非常麻烦,但是在vue3vite里面import导入的是加…...

JAVA——File类

目录 1.概述 2.构造方法 a.根据文件路径创建文件对象 b.根据父级路径和子级路径创建对象 c.根据File表示的路径和String表示路径进行拼接 3.常见方法 a.判断文件是否存在 b.判断文件是否为文件夹 c.判断是否为文件 d.获取文件大小 e.获取文件的绝对路径 f.获取定义…...

掌握Postman,开启API测试新纪元!

Postman是一款流行的API测试工具和开发环境&#xff0c;旨在简化API开发过程、测试和文档编制。它提供了一套功能强大的工具&#xff0c;帮助开发人员更轻松地构建、测试和调试Web服务。 Postman 工具的优势 Postman 可以快速构建请求、还可以保存以后再使用。 Postman 还提…...

JAVA-数据结构-排序

1.直接插入排序 1.原理&#xff1a;和玩扑克牌一样&#xff0c;从左边第二个牌开始&#xff0c;选中这个&#xff0c;和前面的所有牌比较&#xff0c;插在合适的位置 public static void insertsort(int[] arr){//直接插入排序for (int i 1; i < arr.length; i) {//此循环…...

初识数据结构--时间复杂度 和 空间复杂度

数据结构前言 数据结构 数据结构是计算机存储、组织数据的方式(指不仅能存储数据&#xff0c;还能够管理数据-->增删改)。指相互之间存在一种或多种特定关系的数据元素的集合。没有单一的数据结构对所有用途都有用&#xff0c;所以我们要学习各种的数据结构&#xff0c;比…...

Ubuntu QT 交叉编译环境搭建

文章目录 下载安装qtCreatornot a valid identifier 的错误 安装g下载并安装交叉编译器下载交叉编译器安装交叉编译器 下载编译 ARM 的Qt平台源码配置arm的QT平台 下载安装qtCreator 去QT下载官网下载对应需要的QT软件。 这里下载5.12.96版本的 改变安装包权限&#xff0c;…...

C语言中缓冲区底层实现以及数据输入的处理

C语言中缓冲区底层实现以及数据输入的处理 一、缓冲区的概念 在C语言的标准输入输出操作中&#xff0c;缓冲区&#xff08;Buffer&#xff09; 扮演着至关重要的角色。在计算机系统中&#xff0c;缓冲区是一块用于暂存数据的内存区域。在输入输出&#xff08;I/O&#xff09;…...

RocketMQ事务消息原理

一、RocketMQ事务消息原理&#xff1a; RocketMQ 在 4.3 版本之后实现了完整的事务消息&#xff0c;基于MQ的分布式事务方案&#xff0c;本质上是对本地消息表的一个封装&#xff0c;整体流程与本地消息表一致&#xff0c;唯一不同的就是将本地消息表存在了MQ内部&…...

【Java】IntelliJ IDEA开发环境安装

一、下载 官方地址&#xff1a;https://www.jetbrains.com/idea/ 点击Download直接下载 二、安装 双击安装包&#xff0c;点击Next 选择安装路径&#xff0c;点击Next 勾选安装内容 安装完成。 三、创建项目 打开IDEA&#xff0c;填写项目名称&#xff0c;选择项目安装路径…...

Go语言中的通道 (Channel) 实践:Goroutine之间的通信

1. 引言 在Go语言中&#xff0c;并发编程是其核心优势之一。与其他编程语言不同&#xff0c;Go语言推荐使用通道 (Channel) 来进行多线程或并发任务的协调与通信&#xff0c;而非使用锁机制。本文将介绍如何通过通道在多个goroutine之间进行通信&#xff0c;避免竞争条件和复杂…...

常用类(二)--String类的简单总结

文章目录 1.基本介绍1.1创建对象1.2找到对应下标的字符1.3找到对应字符的下标1.4指定位置开始遍历1.5反向进行遍历1.6大小写之间的转换1.7字符串转换为数组1.8元素的替换1.9字符串的分割1.10字符串的截取 2.StringBuilder和StringBuffer2.1 StringBuilder的引入2.2面试题目 1.基…...

Spring Boot开发:从入门到精通

Spring Boot开发&#xff1a;从入门到精通 当你在开发一个新的Java应用时&#xff0c;是否曾经感到苦恼于繁琐的配置和重复的代码&#xff1f;Spring Boot就像一位友好的助手&#xff0c;向你伸出援手&#xff0c;让开发变得轻松愉快。从这一单一框架中&#xff0c;你可以快速…...

【原创】金三银四末班车!4个高薪安全岗,2W月短期项目、百万年薪云架构师,速来!

【原创】金三银四末班车&#xff01;4个高薪安全岗&#xff0c;2W/月短期项目、百万年薪云架构师&#xff0c;速来&#xff01; 金三银四虽然接近尾声&#xff0c;但好岗位从不等人&#xff01;这次我们挖到了4个含金量超高的信息安全岗位&#xff0c;覆盖北京、深圳、上海、厦…...

intv_ai_mk11GPU利用率提升:Llama中型模型批处理与并发请求调优方案

intv_ai_mk11 GPU利用率提升&#xff1a;Llama中型模型批处理与并发请求调优方案 1. 背景与挑战 intv_ai_mk11 是基于 Llama 架构的中等规模文本生成模型&#xff0c;在实际部署中我们发现单请求处理时GPU利用率往往不足30%。这种低效的资源使用导致两个主要问题&#xff1a;…...

智能电动汽车芯片全景解析:从MCU到SoC的技术跃迁

1. 智能电动汽车的芯片革命&#xff1a;从机械控制到数字大脑 十年前打开汽车引擎盖&#xff0c;看到的是一堆机械部件和少量电子控制单元&#xff1b;现在掀开一辆特斯拉的"前备箱"&#xff0c;映入眼帘的却是布满芯片的电路板。这个直观变化背后&#xff0c;是汽车…...

如何快速掌握正则表达式示例生成器:从入门到精通的完整指南

如何快速掌握正则表达式示例生成器&#xff1a;从入门到精通的完整指南 【免费下载链接】regexp-examples Generate strings that match a given regular expression 项目地址: https://gitcode.com/gh_mirrors/re/regexp-examples 正则表达式示例生成器&#xff08;reg…...

深度解析Node.js iCalendar生成器:企业级日历事件架构设计

深度解析Node.js iCalendar生成器&#xff1a;企业级日历事件架构设计 【免费下载链接】ics iCalendar (ics) file generator for node.js 项目地址: https://gitcode.com/gh_mirrors/ic/ics 在现代化的企业应用和分布式系统中&#xff0c;日历事件的标准化生成与管理已…...

React Native Keyboard Controller部署指南:生产环境最佳配置

React Native Keyboard Controller部署指南&#xff1a;生产环境最佳配置 【免费下载链接】react-native-keyboard-controller Keyboard manager which works in identical way on both iOS and Android 项目地址: https://gitcode.com/gh_mirrors/re/react-native-keyboard-…...

3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析

3个秘诀让城通网盘下载提速10倍&#xff1a;ctfileGet工具全解析 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一款专注于获取城通网盘直连地址的开源工具&#xff0c;通过本地解析技术帮…...

超滤膜行业领先公司

《2026年超滤膜权威排名&#xff1a;深圳市洛哈斯水处理技术有限公司何以凭借AI智控技术领跑行业&#xff1f;》在2026年的深度测评中&#xff0c;深圳市洛哈斯水处理技术有限公司凭借其行业领先的“AIoT智能膜系统”与卓越的长期运行稳定性&#xff0c;综合表现排名第一&#…...

车内人体健康检测:赋能智能座舱健康,构建联网化驾乘健康生态

随着人工智能与物联网技术的快速迭代&#xff0c;汽车正从传统交通工具加速演进为集安全、健康、舒适于一体的智慧移动空间。其中&#xff0c;车内智能人体健康检测作为智能座舱健康体系的核心支撑&#xff0c;依托车内联网健康监测技术&#xff0c;打破传统座舱的功能边界&…...

OFA模型在VMware虚拟机中的开发测试环境搭建

OFA模型在VMware虚拟机中的开发测试环境搭建 对于很多刚接触AI模型开发的个人开发者或学生来说&#xff0c;最大的门槛往往不是算法本身&#xff0c;而是硬件。一块性能足够的独立GPU价格不菲&#xff0c;让很多人在起步阶段就望而却步。难道没有物理GPU&#xff0c;就真的没法…...