c/c++ 指针数组

news2024/9/20 20:40:08

        顾名思义就是元素为指针的数组,如定义一个 char *类型的指针数组:

 char *strName[] = {
	"123",
	"456",
	"789",
	"abc",
	"def"
};

如果是这样初始化的指针数组,c++编译是会抛出警告信息的:

因为用了字符串常量进行初始化,所以是不可被修改的,所以定义时需要加上 const:

#include <stdio.h>
#include <stdlib.h>

 char *strName[] = {
	"123",
	"456",
	"789",
	"abc",
	"def"
};

int main()
{
	printf("strName[1] = %s\n", strName[1]);
	printf("*strName = %s\n", *strName);
	printf("*strName+1 = %s\n", *strName+1);
	printf("sizeof strName[2] = %lu\n", sizeof(strName[2]));
	
    return 0;
}

*strName 是解引用,所以输出是 “123” ,而 *strName + 1 为什么输出是 “23” 呢?因为在 *strName 解引用后它的类型是 char*,+1 后即挪动一个 char 长度,指向了“123”中的“2”位置,其实它跟 “123” + 1 的效果是一样的:
 

#include <stdio.h>
#include <stdlib.h>

const char *strName[] = {
	"123",
	"456",
	"789",
	"abc",
	"def"
};

int main()
{
	printf("strName[1] = %s\n", strName[1]);
	printf("*strName = %s\n", *strName);
	printf("*strName+1 = %s\n", *strName+1);
	printf("\"123\"+1 = %s\n", "123"+1);
	printf("sizeof strName[2] = %lu\n", sizeof(strName[2]));
	
    return 0;
}

如果不用字符串常量初始化,也是可以手动申请内存的,但定义是就不能用const了,如:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *strName[3];
int main()
{
	char buf[16];
	for(int i = 0; i < 3; i++)
	{
		strName[i] = new char[16];
		snprintf(buf, sizeof(buf), "test_%d", i * 10);
		strncpy(strName[i], buf, 15);
	}
	printf("strName[1] = %s\n", strName[1]);
	printf("*strName = %s\n", *strName);
	printf("*strName+1 = %s\n", *strName+1);
	printf("sizeof strName[2] = %lu\n", sizeof(strName[2]));
	
	for(int i = 0; i < 3; i++)
	{
		if(strName[i])
		{
			delete strName[i];
		}
	}
    return 0;
}

 

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

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

相关文章

震惊!国产数据库厂商减少了51家!

前面文章我提到国产数据库厂商实际上大部分都不赚钱&#xff0c;我估计国产目前国产数据库厂商利润为正的&#xff0c;目前不超过5家。 而经济寒冬&#xff0c;融资困难&#xff0c;那么对于很多厂商&#xff0c;尤其是全靠融资的数据库厂商来讲&#xff0c;这将变得极其困难。…

Mysql系列-索引简介

索引是排好序的数据结构 1 索引数据结构 hash索引、二叉树、平衡二叉树、B-Tree、BTree 数据结构在线示例&#xff1a;点击跳转 2 索引类型 2.1 聚簇索引 又叫“聚集索引” &#xff0c;索引和数据存储在一起 2.2 非聚簇索引 又叫“非聚集索引” &#xff0c;索引和数据分开…

新MyEclipse(比如MyEclipse2019)自动生成PO类和配置文件的方法。

新版的MyEclipse&#xff08;比如MyEclipse2019&#xff09;上面myeclipse菜单没有了&#xff0c;选择项目右键菜单myeclipse也没有了。 新的方式是&#xff1a;右键菜单——Configure Facets...&#xff0c;然后选择Install Hibernate Facets&#xff0c;下面一步一步按提示操…

【ACM独立出版】第二届物联网与云计算技术国际学术会议 (IoTCCT 2024,9月27-29)

第二届物联网与云计算技术国际学术会议 (IoTCCT 2024)将围绕“物联网与云计算技术”领域&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一个分享专业经验&#xff0c;扩大专业网络&#xff0c;面对面交流新思想以及展示研究成果的…

机械学习—零基础学习日志(Python做数据分析03)

元组 这里主要讲解了元组的相关语法内容。 可以在数据分析中使用相关的方法。 拆分元组 重点参考来源&#xff1a;

appium历史版本地址链接

appium / Appium.app / Downloads — Bitbucket ios的appium界面图 链接: https://pan.baidu.com/s/1i8BRaZgQA3ImLUhKZjfhiA 提取码: 5c8b

面向对象需求分析

1. 面向对象分析概述 1.1 面向对象基本概念 以对象为中心&#xff0c;以类为构造机制&#xff0c;来认识、理解、刻画客观世界和设计、构建相应的软件系统。 1.2 UML统一建模语言 为什么要使用UML UML基本概念 统一建模语言&#xff08;UML&#xff09;是一个支持模型化和软…

【苍穹外卖】前端 Day 1

1 Vue 1.1 通过 vue cli 脚手架创建前端工程 1.2 项目结构 1.3 启动项目 VS Code 启动前端项目&#xff1a; npm run serve 注意这里占用端口号 8080 与 java springboot 占用端口号一致&#xff0c;有冲突 serve 是这个名字 终止&#xff1a;ctrl c 修改端口号 2 vue 基本…

JVM面试真题总结(六)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 解释GC的标记-整理算法及其优点 GC&#xff08;垃圾收集&#xff…

鸿蒙开发应用图标信息配置

鸿蒙开发配置文件 应用管理里面的应用 手机桌面上的应用信息 学习更多前端知识我已经整理到下面了↓↓↓↓↓↓快去看看吧

Android以及IoT设备传感器软件开发总结

1 传感器选型 1.1 传感器选型 6 axis&#xff1a;Bosch BMI160&#xff08;比较差&#xff09;&#xff0c;InvenSense MPU6050&#xff08;DMP&#xff09;&#xff0c;ST LSM6Dxx Acc: Freescale MMA7450L (MicroMachined Accelerometer/MC Multi-Axis, iMX31), Kionix KXSD9…

渣土车检测数据集 2600张 渣土车 带标注 voc yolo

数据集名称&#xff1a; 渣土车检测数据集 数据集规模&#xff1a; 图像数量&#xff1a;2600张标注类型&#xff1a;渣土车检测格式兼容性&#xff1a;支持VOC和YOLO标注格式 数据集内容&#xff1a; 该数据集主要用于训练和评估计算机视觉模型&#xff0c;特别是在渣土车&…

如何本地部署AI智能体平台,带你手搓一个AI Agent

今天分享如何在个人电脑上搭建一个AI智能体平台&#xff0c;可以自定义聊天机器人&#xff0c;设计智能体&#xff0c;编排工作流&#xff0c;知识库&#xff0c;RAG管道等等&#xff0c;还支持本地大模型接入&#xff0c;并对外提供API接口。 如搭建过程有疑问&#xff0c;可…

存储虚拟化

引入-在安装虚拟化VRM界面出现配置数据存储 1.数据存储 还有一处出现数据存储&#xff0c;创建虚拟机时,发放业务虚拟机&#xff0c;不建议选择&#xff0c;autoDS_CNAxx 2.引入FC集群文件系统 传统存储上一个LUN映射给多个CNA使用--集群文件系统VIMS-锁机制--共享存储 3.集群…

工厂方法模式和抽象工厂模式

工厂方法模式 一个工厂只能创建一种产品 工厂方法模式的结构 工厂方法模式包含以下4个角色 Product&#xff08;抽象产品&#xff09; ConcreteProduct&#xff08;具体产品&#xff09; Factory&#xff08;抽象工厂&#xff09; ConcreteFactory&#xff08;具体工厂…

一篇文章带你看懂住宅代理如何实现内容过滤

在网络安全中&#xff0c;内容过滤是用户隐私保护的重要组成部分&#xff0c;将不良内容拦截在安全网之外是内容过滤的重中之重。在当下&#xff0c;住宅代理作为异军突起的网络安全工具&#xff0c;在内容过滤上有着不错的表现。本文将深入探讨住宅代理如何实现内容过滤&#…

项目小结二()

一.个人信息的界面 这里可以进行用户信息的修改&#xff0c;并渲染数据上去 二.这两天&#xff0c;出现的问题&#xff1a; 1.mybatis中 字段取别名 &#xff08;还没验证&#xff0c;是否正确&#xff09; 问题描述&#xff1a;由于实体类中的变量名&#xff0c;与数据库中…

数据权限的设计与实现系列8——前端筛选器组件Everright-filter集成框架开发1

背景 前面我们对筛选器组件进行了功能探索和技术验证&#xff0c;接下来就开始着手集成工作&#xff0c;融入一二三开发平台&#xff0c;打通前后端&#xff0c;最终让数据权限控制功能落地。 整体集成工作比较复杂&#xff0c;我们遵循由易到难的原则&#xff0c;先搭建出完整…

IPv6理论基础

IPV6 地址介绍 地址标识方法 格式 : XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX&#xff0c;128bit&#xff0c;8个16位&#xff0c;16进制 X表示十六进制的一个字符&#xff0c;可以是0 - 9,A -F 字母大小写不敏感&#xff0c;最终设备上显示均为大写 一个地址由8个字段构成…

Leetcode3266. K 次乘运算后的最终数组 II

Every day a Leetcode 题目来源&#xff1a;3266. K 次乘运算后的最终数组 II 解法1&#xff1a;3266. K 次乘运算后的最终数组 II 用最小堆手动模拟操作&#xff0c;直到原数组的最大值 mx 成为这 n 个数的最小值。 设此时还剩下 k 次操作&#xff0c;那么&#xff1a; 对…