C指针之初始化(三)

news2024/11/25 12:36:48

一、引言

C/C++语言中引入了指针,使得程序能够直接访问内存地址,使得很多复杂的操作变得简单,同时也提高了程序的运行效率。指针即是地址,但是地址却是通过指针变量来存储的。因此我们通常所说的指针在很多时候说的都是指针变量。指针变量在使用之前必须被初始化,否则就可能发生意想不到的错误。而且关于指针初始化,不同的编译器给出的告警是不一样的,有些系统给出告警,而有些系统又不给。因此,指针虽然,但使用要谨慎。而且要是使用了动态分配空间的模式为指针做初始化,则使用结束后还需要手工释放空间,以节约内存空间。本文以C语言为主介绍了常见的指针变量初始化方法。

二、指针变量初始化范例

1.指向某个变量的地址
示例代码:

#include"stdio.h"  
int main()
{
	int a = 1;
	int *p = &a;//指针变量初始化 
	printf( " 存储变量a的地址:%x\n", &a );
	printf( " 指针变量p存储的地址:%x\n", p );
	printf( " 指针变量p指向地址中的数据:%5d\n", *p );
	return 0;
}

运行结果:
在这里插入图片描述
2.动态分配空间
通常用于动态数组,C语言使用malloc进行动态分配空间,C++使用new分配空间。动态数组使用结束需要释放空间,使用free或者delete进行释放。
示例代码:

#include"stdio.h" 
#include"malloc.h"
int main()
{
	int i, num, sum, count;
	int *arr;
	count = 0;
	while( 1 )
	{
		sum = 0;
		num = 0;
		printf( "数组元素的个数(0 结束):" );
		scanf( "%d", &num );
		if( num == 0 )
		{
			printf( "结束运行!\n" );
			break;
		}
		count++;
		arr = ( int * )malloc( num * sizeof( int ) );//动态分配空间
		for( i=0; i<num; i++ )
		{
			printf( "输入第 %d 个元素:", i+1 );
			scanf( "%d", &arr[i] );
			sum += arr[i];
		}
		printf( "第 %d 组元素之和:%5d\n", count, sum );
	}
	free( arr );//释放由malloc分配的空间 
	return 0;
}

上述代码是C语言,如果使用C++语言,则是如下代码:

#include"iostream" 
using namespace std;
int main()
{
	int i, num, sum, count;
	int *arr;
	count = 0;
	while( 1 )
	{
		sum = 0;
		num = 0;
		cout<< "数组元素的个数(0 结束):";
		cin>>num;
		if( num == 0 )
		{
			cout<<"结束运行!"<<endl;
			break;
		}
		count++;
		arr = new int[num];//使用new分配空间
		for( i=0; i<num; i++ )
		{
			cout<<"输入第 " <<(i+1) << " 个元素:";
			cin>>arr[i];
			sum += arr[i];
		}
		cout<<"第 " << count <<" 组元素之和:" <<  sum << endl;
	}
	delete[] arr;//释放由new分配的空间 
	return 0;
}

运行结果:
在这里插入图片描述
3.指向某个数组的首地址
通常用于快速对数组元素做相应的操作,例如利用指针变量p++模式对数组赋值或者读取元素,其读取内存速度快。
示例代码:

#include"stdio.h" 
#define N 10
int main()
{
	int i, arr[N], *p;
	p = arr; //p = &arr[0]; //指针变量p指向数组的首地址,此处有两种不同的赋值方法
	i = 1;
	while( i <= N )
	{
		printf( "输入第 %d 个元素: ", i );
		scanf( "%d", p++ );
		i++;
	}
	printf( "数组arr中的元素:" );
	for( i=0; i<N; i++ )
	{
		printf( "%5d", arr[i] );
	}
	return 0;
}

运行结果:
在这里插入图片描述
4.指向字符串变量或字符串常量
通常用于快速对字符串做相应的操作。
示例代码:

#include"stdio.h"
#include"string.h"
int main()
{
	char *pc;                    
	//pc = "c language";//如此初始化指针会发生告警
	char str[] = "C/C++ Programming language";
	pc = str; 
	printf( "%s\n", pc ); 
	pc = pc + 2;           
	printf( "%s\n", pc ); 
	char *p = strstr( pc, "lan" );//找到 "lan"在pc中位置地址,赋值为指针变量p 
	printf( "%s\n", p );
	return 0;
}

运行结果:
在这里插入图片描述
5.利用其它指针做初始化
通常用于缓存某一地址。
示例代码:

#include"stdio.h"
#include"malloc.h"
int main()
{
	int i, *p, *q;
	int num = 5;
	p = ( int * )malloc( num * sizeof(int) );//动态分配空间
	q = p;//q指向p的地址,这样当q的位置发生改变时,p的首地址不变
	i = 1;
	while( i <= num )
	{
		printf( "输入第 %d 个元素: ", i );
		scanf( "%d", q++ );//利用指针变量q偏移来对动态数组p赋值
		i++;
	}
	printf( "数组arr中的元素:" );
	for( i=0; i<num; i++ )
	{
		printf( "%5d", p[i] );
	}
	return 0;
}

在这里插入图片描述

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

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

相关文章

AzkabanExecutorServer自动注册分析

启动AzkabanExecutorServer发现会自动注册&#xff0c;但是active默认为0&#xff0c;需要修改为1&#xff0c;否则 SELECT id, host, port, active FROM executors where activetrue查询不到记录&#xff0c;导致 AzkabanWebServer启动时候还是失败。 因此azkaban的正确启动…

MySQL的行锁和表锁

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题&am…

复现黑客在后门中藏匿后门

PHP实现在后门中藏匿后门 在攻击渗透的时候会传入shell后门方便进行远控。其中的后门包括多种类型&#xff0c;大马是功能最全的直接提供了可视化的界面方便攻击者进行提权、扫描、上传等一系列的操作。 但有很多hacker不讲武德&#xff0c;在写好的大马中藏入自己的后门&…

Java#28(集合进阶1---单列集合)

目录 一.Collection---------单列集合-------一次只能添加一个元素,如: 小明 1.Collection的常用方法 2.Collection的遍历 迭代器遍历 增强for遍历 Lambda表达式 3.List集合的特有方法 List集合的5种遍历方式 ArrayList集合 泛型 4.Set的方法和遍历方式 HashSet集合 …

如何用看板工具做轻量级项目管理

本文分享一下&#xff0c;怎么用看板工具做轻量级项目管理。 说起管理项目&#xff0c;会遇到各种各样的事情&#xff0c;我们多多少少有些头疼&#xff0c;人员任务分配不均&#xff0c;对接不及时&#xff0c;沟通过不及时等等。 我们包括采购、人力资源、销售、市场都在用…

【深度学习】torch.squeeze()移除维度函数 | torch.unsqueeze()增加某一维度函数 | pytorch

文章目录前言一、torch.squeeze()函数二、torch.unsqueeze()函数前言 这两个函数在pytorch框架下的深度学习经常用到&#xff0c;这次把它们记录一下。 一、torch.squeeze()函数 torch.squeeze()用来“挤”掉某一个维度为1的维度&#xff0c;或者所有维度为1的维度。&#x…

Unity3D教程:布娃娃系统

首先&#xff0c;将你3Dsmax的角色和Bipes汇出成FBX档&#xff0c;设定如下即可。(注意不可以有中文路径喔否则无法正确汇出) 打开Unity3D&#xff0c; 可以看见我的场景内只有&#xff1a;摄影机、人物(Man)、灯光、地板。 在Hierarchy视窗内将人物(Man)的Bip01所有标签打开&a…

WebRTC学习笔记一 简单示例

一、捕获本地媒体流getUserMedia 1.index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-e…

基于预训练模型的Unet【超级简单】【懒人版】【Pytorch版】

基于预训练模型的Unet【超级简单】【懒人版】【Pytorch版】 在本项目开始前&#xff0c;首先给大家保证&#xff0c;本次项目只是一个最简单的Unet实现&#xff0c;使用现成的代码&#xff0c;不需要手写代码&#xff0c;使用预训练模型&#xff0c;不需要标注数据集和训练。所…

NTFS及文件共享

一&#xff0c;NTFS安全权限概述 1、给文件和文件夹设置权限&#xff0c;通过设置权限&#xff0c;实现不同的用户访问不同文件和文件夹的权限。 2、分配了正确的访问权限后&#xff0c;用户才能访问对应资源。 3、设置权限防止资源被篡改、删除。 二、文件系统概述 文件系统…

[附源码]Python计算机毕业设计SSM旅游服务平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Whistle 前端抓包

whistle文档&#xff1a;http://wproxy.org/whistle/install.html 1.确保电脑安装了node node -v如果能正常输出Node的版本号&#xff0c;表示Node已安装成功 2.安装whistle npm install -g whistlewhistle安装完成后&#xff0c;执行命令 whistle help 或 w2 help&#xf…

Spring——三级缓存解决循环依赖详解

三级缓存解决循环依赖详解一、什么是三级缓存二、三级缓存详解Bean实例化前属性赋值/注入前初始化后总结三、怎么解决的循环依赖四、不用三级缓存不行吗五、总结一、什么是三级缓存 就是在Bean生成流程中保存Bean对象三种形态的三个Map集合&#xff0c;如下&#xff1a; // 一…

IPv6进阶:IPv6 过渡技术之 NAT64(IPv6 节点主动访问 IPv4 节点-地址池方式)

实验拓扑 PC1是IPv4网络的一个节点&#xff0c;处于Trust安全域&#xff1b;PC2是IPv6网络的一个节点&#xff0c;处于Untrust安全域。 实验需求 完成防火墙IPv4、IPv6接口的配置&#xff0c;并将接口添加到相应的安全域&#xff1b;在防火墙上配置NAT64的IPv6前缀3001::/64&…

cpu设计和实现(数据访问)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在cpu设计当中&#xff0c;数据访问是比较重要的一个环节。一般认为&#xff0c;数据访问就是内存访问。其实不然。我们都知道&#xff0c;cpu访问…

【微服务】SpringCloud中Ribbon的轮询(RoundRobinRule)与重试(RetryRule)策略

💖 Spring家族及微服务系列文章 ✨【微服务】SpringCloud中Ribbon集成Eureka实现负载均衡 ✨【微服务】SpringCloud轮询拉取注册表及服务发现源码解析 ✨【微服务】SpringCloud微服务续约源码解析 ✨【微服务】SpringCloud微服务注册源码解析 ✨

Nginx的操作

一、什么是nginx。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 , 其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx代码完全用C语言从头写成 . 能够支持高达 50,000 个并发连接数的响应. 现在…

【pen200-lab】10.11.1.72

pen200-lab 学习笔记 【pen200-lab】10.11.1.72 &#x1f525;系列专栏&#xff1a;pen200-lab &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &#x1f36d;作…

aws beanstalk 使用eb cli配置和启动环境

Elastic Beanstalk 不额外收费&#xff0c;只需为存储和运行应用程序所需的 AWS 资源付费 EB CLI 是 Amazon Elastic Beanstalk 的命令行界面&#xff0c;它提供了可简化从本地存储库创建、更新和监控环境的交互式命令 安装eb cli $ pip install virtualenv $ virtualenv ebve…

2023年考研数学测试卷(预测)

2023年考研数学测试卷 原题再现&#xff1a; 多的我也不说了&#xff0c;直接把预测的2023年考研数学卷子分享给大家好吧&#xff0c;准确详细全面是我的宗旨&#xff0c;我的博客创立初衷和发展方向肯定不应该只是"考试有用"&#xff0c;而是面对社会生产生活的有用…