IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言变量地址分配冲突 -> 正文阅读

[C++知识库]c语言变量地址分配冲突

在做某个题时,我设置了这样一个函数:
它传入一个长度为 3 的数组{9,9,9}的地址,改成{8,8,8},设置一个 *p 指向数组头指针的前一位置,赋值p所在地址块 *p=1 ,并return p;
按常理来说,我在main函数中调用方法后,遍历4次打印应当打出{1,8,8,8},可是打出的却是{4,8,8,8}。
我查了半天,终于发现,问题在于main函数中有另一个变量

int main() {
	
	int digits[3]={9,9,9};
	int returnSize;
	

这个returnsize在初始分配时直接占了digits的前一个位置,那么我返回访问的第一个*p就是returnsize的值4。这可能和c语言变量分配规律有关,可是我在网上查不到,目前来看,要么我只在digits地址往高操作,要么我将returnSize强制分配到指定地址 :
比方说int returnSize=(int)0x28fec8
之类的,但是这样做很危险,而且考试写算法根本不能这么写
或者是整到指针型

int* returnSize=(int*)malloc(sizeof(int));

这种应该更好些,也符合常规逻辑,实际中应该这么写。
但是在写算法题的时候只能在一个新方法内部进行各种操作,主函数相当于不可见,它怎么规定变量完全不归我管,万一人家真像我最开始写的那样,那我用这种方法只能是自认倒霉。或者我把returnsize指针地址在新方法中改了,但是改地址又像上面所说,是很危险的行为。总之现在查不到这方面的东西,先记着,以后再慢慢找路子。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 11:56:22  更:2021-08-26 11:58:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:06:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码