C语言实用算法系列之二级指针用法简介

一、几个知识点

  • 内存四区:栈、全局(静态),常量区,除此以外剩余的空间暂时不能随意使用;除此以外剩余的空间只要通过malloc函数申请一下,就可以使用了;
  • 申请一个堆上的单个int变量的方法:int* p = (int*)malloc(sizeof(int));
  • 申请一个堆上的int数组的方法:int* p = (int*)malloc(sizeof(int)*5);
  • 堆上的地址可以跨函数使用,在不需要使用时使用 free 函数释放;

二、二级指针

问题引入

char* ss[4] = { "basic","fortran","C++" };//每个元素都是char*类型
对于这样的指针数组,应该用什么样的指针去遍历呢?答案是:二级指针
char** p = ss; // 二级指针变量p,指向一个指针数组

示例1-在栈内和堆上分别定义指针数组

char* ss[] = { "abc","dd","aaa",NULL };
char* *p = (char**)malloc(sizeof(char*) * 4);
int i = 0;
while (i < 4)
{p[i] = ss[i];++i;
}
free(p);

示例2-二级指针遍历指针数组

#include <stdio.h>
void main()
{char* p = "Test";char* ar[4] = { "basic","fortran","C++" }; // 一共4个元素,每个元素都是char*类型printf("sizeof(ar)=%d\n", sizeof(ar));char* *pp = ar;int i = 0;while (i < sizeof(ar) / sizeof(ar[0])){p = pp[i];printf("第%d个指针变量指向的内容是:%s\n", i, p); //pp[i]的类型是char*++i;}printf("p指向的地址是:0x%p内存空间上的内容是:%s\n", p, p);
}

运行结果
在这里插入图片描述

示例3

#include<stdio.h>
void main()
{int ar[10] = { 33,55 };int n = 10;int* p = &n; //一级指针变量指向了一个普通变量,为了远程操控普通变量存储的数据int* q = ar;*p = -1;//int* *pp = &p; //指针变量的指针是二级指针//pp = &q;//*pp = p;//*p或p[0]远程操控一个一级指针变量,让它指向到其他地址int* as[10] = { ar,&n,NULL }; // 每个元素都是一个一级指针变量int* *pp = as; // =&as[0]; // as[0]类型是int*类型int i = 0;while (i < sizeof(as) / sizeof(as[0])){printf("第%d条指针指向:0x%p\n", i, pp[i]); //pp[i]类型是int*类型++i;}printf("\n");int ar1[] = { 32,56,93,56,-1,0 }; //每个元素都是int类型int* p1 = &ar1[0]; // ar; // 一级指针变量p, 指向一个普通变量的一维数组while (*p1){printf("p[%d]=%d\n", p1 - ar1, *p1);//指针的减法: 相差字节/sizeof(int),逻辑上是几个int++p1;}
}

在这里插入图片描述

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

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

相关文章

二层交换机的工作原理和风险

1、先学习&#xff0c;建立MAC地址和交换机接口号的映射关系。 2、后转发&#xff0c;查询MAC地址表&#xff0c;找到目的MAC与接口号的映射&#xff0c;单播转发。 3、如果是广播包&#xff08;目的MAC是全F&#xff09;&#xff0c;除入接口以外的所有其它接口进行转发。 …

C语言实用算法系列之行指针

代码 #include <stdio.h>void Test(double (*a)[3]) {printf("sizeof(a)%d\n", sizeof(a));printf("sizeof(*a)%d\n", sizeof(*a));printf("sizeof(a[1])%d\n", sizeof(a[1])); }void main() {double ar[2][3] { {1.0,2.1,3.2},{4.3,5.4…

解决二层单点故障及链路聚合

什么是二层单点故障&#xff1f; 交换机接口级的故障 如何解决&#xff1f; ①在交换机中间接2根线&#xff0c;线路冗余>形成环路&#xff0c;导致广播风暴、MAC地址表振荡。 ②通过STP生成树协议破坏环路&#xff0c;逻辑隔断某一个接口。 链路聚合 应用场景&#xff1…

cassandra生产监控_碎玻璃:诊断生产Cassandra问题

cassandra生产监控我刚刚在健康市场科学&#xff08;HMS&#xff09;成立二周年之际&#xff0c;我们几乎一直在这里与Cassandra一起工作。 那时&#xff0c;我们遇到的问题很少。 就像我曾经使用过的其他几种技术一样&#xff0c;Cassandra“行之有效”。 但是&#xff0c;就…

C语言实用算法系列之DOS传参“加减乘除计算器”

简介 主要采用str族函数实现字符检测&#xff0c;只能用DOS传参进行计算&#xff0c;详见运行结果。 代码 #include <stdio.h> #include <string.h> #include <stdlib.h>/* int main(int argc, char** argv) { int i0; printf("总共有%d条有效字符串…

动态主机配置协议DHCP协议

如何给主机配置IP地址&#xff1f; ①手动配置 ②DHCP 什么是DHCP&#xff1f; 动态主机配置协议&#xff08;应用层协议&#xff09; 功能&#xff1a;客户端分配IP&#xff0c;使得客户机能够利用这个IP上网 为什么需要DHCP&#xff1f; ①早期是为了解决IPv4公网不够用的…

两个Oracle JDK的故事

最近有人担心 Java开发人员现在会无意中使用错误的Oracle提供的JDK实现&#xff08;从JDK 11开始 &#xff09;&#xff0c; Oracle提供了开放源代码OpenJDK的构建 &#xff0c;并且还提供了主要基于OpenJDK源代码的商业JDK构建。 下表比较并对比了Oracle提供的两个JDK版本&am…

C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针+switch

函数指针简介 #include <stdio.h>int add(int a, int b) {return a + b; }int dec(int a, int b)

为什么要区分不同的网段IP地址

不划分网段的问题&#xff1f; ①广播流量太多&#xff0c;占用网络带宽和设备资源。 ②管理复杂&#xff0c;不利于发现问题、排除故障。 ③不利于安全风险的隔离&#xff0c;安全问题影响范围更大。 如何划分不同的网段&#xff1f; IP地址如&#xff1a;192.168.1.10 / 25…

不同网段通信的过程

第一步&#xff1a;判断对方在不在同一个网段 不在 第二步&#xff1a;PC通过本地路由查找默认网关信息 第三步&#xff1a;PC通过本地ARP表查找默认网关MAC地址 有默认网关MAC&#xff0c;则接着第四步&#xff1b;没有默认网关MAC&#xff0c;则通过ARP广播寻址&#xff1b…

【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组

代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <stdlib.h>enum {READ_ONLY,HIDE,SYSTEM = 55,TEST }

ARP地址解析协议(深信服X计划)

文章目录一、ARP需求背景二、ARP概述及工作原理三、免费ARP概述及案例四、代理ARP概述及案例一、ARP需求背景 在以太网中&#xff0c;一个主机和另一个主机进行直接通信&#xff0c;必须要知道目标主机的MAC地址。单这个目标MAC地址是如何获得的呢&#xff1f;它就是通过ARP&a…

grails框架_Play和Grails Java框架的优缺点

grails框架框架通过为程序员提供一些有用的功能来简化应用程序开发过程。 由于开发人员的普遍使用&#xff0c;Java框架经常被开发人员使用。 您可以在市场上找到各种Java开发框架。 新手开发人员经常在论坛上发布一个常见问题&#xff1a;“哪种Java框架是最好的&#xff1f;”…

TCP和UDP协议(深信服X计划)

文章目录一、TCP协议概述二、TCP三次握手和四次挥手三、UDP协议概述四、TCP和UDP对比及应用场景一、TCP协议概述 TCP (Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由ETF的RFC 793定义。在简化的计算机网络O…

C语言实用算法系列之时间族函数、目录遍历

时间族函数测试 代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <stdlib.h> #include <time.h>void main() {time_t tt;//long __int64time(&tt);tm* time localtime(&tt);char* ws[] { "日","一","…

跟踪反应流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持&#xff0c; 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是一篇关于如何使用此出色的库添加对分布式跟踪支持的简要说明。 考虑两个应用程序–一个使用上游服务应用程序的客户端应用程序…

DNS域名解析协议(深信服X计划)

文章目录一、DNS协议背景二、DNS协议概述三、DNS工作原理四、DNS常用的记录及作用一、DNS协议背景 在Internet网中连接着数量众多的主机&#xff0c;要让这些主机进行通信&#xff0c;需要有一套名字标识体系&#xff0c;让主机之间能够彼此找到对方&#xff0c;我们可以用多种…

【总结】C语言实用算法系列之知识点梳理_附学生管理系统各模块代码

1、内存四区特点 a)全局区变量空间缺省每个字节为00,栈空间缺省是cc,堆缺省是cd b)堆、全局区(静态区)、字符串常量区,与栈区空间的位置距离很大,栈区访问速度可能最快; 2、C语言与C++编译器的区别: a)所有的.c文件在VC或者VS编译器中按C编译器编译; b)所有的.cp…

基于51单片机的温度检测监测报警系统设计

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发生关键词&#xff1a;单片…

【1】C++语法与数据结构之C语言学生管理系统转C++学生管理系统

从本文开始,后续将陆续发布C++语法与数据结构的相关内容,同样还是以学生管理系统来融汇贯通所有知识点。 接上篇博客【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组C++中定义CStudent类 文件名:Student.h typede…