C进阶 - 数组和指针

这篇具有很好参考价值的文章主要介绍了C进阶 - 数组和指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Declare an array manually  VS  malloc or calloc an array

用英文是因为有些东西得用他们的语言才能表达不失真

栈和堆

In C, a heap is a region of memory that is dynamically allocated during runtime. It is used to store variables and data structures that have a longer lifetime than the function call that created them.The stack, on the other hand, is a region of memory that is used for function call frames and local variables. It is managed automatically by the CPU and memory management unit, and is typically much faster to allocate and deallocate memory from than the heap.When to use the heap instead of the stack depends on the specific use case. If the data structure or variable needs to have a longer lifetime than the function call that created it, or if the amount of memory needed is not known at compile time, then the heap is a better choice.On the other hand, if the data structure or variable has a short lifetime and the amount of memory needed is known at compile time, then the stack is a better choice as it is faster and more memory-efficient.

我们在main声明一个数组叫a,可以说this is a static array

=> 在中main scope里把开辟一片连续的内存交给a,a是一片内存

而用malloc或者calloc开辟数组是用指针指向堆一块内存区域,并且要注意的是一开始具体指向的就是第一个数据,所谓的它能指向一片区域是因为数据存放在一起的,移动指针可以到下一个

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

int main() {
	int *arr = (int*)malloc(sizeof(int)*10);
	printf("%d\n", sizeof(int));
	printf("arr: %p\narr + 1: %p\n&arr: %p\n&arr + 1: %p\n",arr, arr+1, &arr, &arr+1);
	printf("%d\n", sizeof(arr)/sizeof(arr[0]));
	int a[5] = {1, 2, 3, 4, 5};
	printf("a: %p\na + 1: %p\n&a: %p\n&a + 1: %p\n",a, a+1, &a, &a+1);
	printf("%d\n", sizeof(a)/sizeof(a[0]));
	return 0;
}

sizeof是运算符,本质是通过偏转量来确定字节数 => sizeof(a) == (a + 1) - a

前面说过数组名a代表的是一片内存,如果它+1的话得到的是下一片内存的地址啦

做差不就是这篇内存的总字节数吗?再除以int的单位字节数就是这个数组的长度

但是malloc或calloc出来的数组不能通过这种方法来获取数组长度

因为他们有本质区别:malloc的arr是一个指针,sizeof(arr)得到的就是arr指针的大小,并不是一整片int数据所在的内存总字节数

想其他函数传数组也一样,其实是用指针接受从main scope传来的数组首地址,用sizeof获取数组长度同样不科学

=> 要想用sizeof获取数组长度仅限于在同一scope中declare 的 a static array

C进阶 - 数组和指针

 

字符数组以及字符串常量

挖个坑,以后有空再来填上

C进阶 - 数组和指针

 

 C进阶 - 数组和指针文章来源地址https://www.toymoban.com/news/detail-491971.html

到了这里,关于C进阶 - 数组和指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言——动态内存函数(malloc、calloc、realloc、free)

    在C语言中,动态内存函数是块重要的知识点。以往,我们开辟空间都是固定得,数组编译结束后就不能继续给它开辟空间了,开辟的空间满了,就不能在开辟空间了(就是不能在添加数据了)。学习本文章,我们就可以解决这个问题,向内存申请空间,满啦可以继续申请空间

    2024年02月13日
    浏览(42)
  • C语言中灵活多变的动态内存,malloc函数 && free函数&& calloc函数 && realloc函数

    铁子们好啊!今天阿辉给大家讲一下C语言里面特别重要的一块知识——动态内存管理,为什么说它重要呢?相信大家在使用数组时都遇到过数字开辟空间太大或者太小的情况,这是很尴尬的因为数组空间一旦确定就难以扩大或者缩小。而今天的动态内存管理将帮我们很好的解

    2024年02月03日
    浏览(38)
  • 动态内存分配:malloc、calloc、realloc(超详解析,多维度分析,小白一看就懂!!!!)

    目录 一、前言 二、动态内存的简单介绍 🍉什么是动态内存分配 🍎为什么要使用动态内存分配  三、动态内存函数的介绍和拓展  🍋malloc()函数  🍊free()函数  🍌calloc()函数 🍇realloc()函数 四、常见动态内存分配的错误 五、共勉 在学习 动态内存分配 时,感觉这些动态分

    2024年02月05日
    浏览(43)
  • 动态内存malloc,calloc,realloc如何使用,使用场景及使用free释放内存时崩溃的原因

    目录 1.内存区域 2.void与void* 3.应用场景 4.malloc 5.calloc 6.realloc 7.free崩溃的原因 7.1引入 7.2具体原因 7.2.1越界 7.2.2指针移动 7.2.3重复释放同一段内存 局部变量 : 定义在函数内部的变量 , 包括形参 , 在栈 (stack) 中 , 作用域在函数内部有效 , 生存周期 : 进入函数创建, 退出函数销毁。

    2024年02月05日
    浏览(56)
  • 指针进阶之数组指针和指针数组

    在初识指针那一节,已经介绍了指针数组,这里再强调一下。 指针这一章,可以从初识指针开始看起。 指针数组是 数组 ,用来存放指针的。 比如: 又比如: (1)案例一 指针数组有什么用呢? 既然指针数组是用来存放指针的数组,那么最能想到的用法,就是 将一些变量

    2024年02月04日
    浏览(40)
  • 【C语言进阶】指针数组 —— 数组指针

    🎬 鸽芷咕 : 个人主页  🔥 个人专栏 : 《C语言进阶篇》 《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面我们已经把指针大部分内容给学完了,今天就给大家带来数组指针or指针数组!    ⛳️ 很多说这俩名字不是差不

    2024年02月14日
    浏览(36)
  • 掌握指针进阶:探索字符指针、数组指针和指针数组的妙用

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言进阶之路 👉专栏推荐:✅C语言初阶之路 ✅数据结构探索 💻代码仓库:江池俊的代码仓库 ​🎪 社区:GeekHub社区 ​ 🎉欢迎大家点赞👍评论📝收藏⭐ 指针的主题,其实我在初阶指针《【C语言】指针----初阶》章节就已经接讲

    2024年02月12日
    浏览(34)
  • 【C语言】指针进阶:字符指针&&数组指针&&函数指针

    ✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 🌹 感谢您的点赞与关注,同时欢迎各位有空来访我的 🍁平凡舍 回想之前,我们学了 指针 的一些基础👉 指针与结构体 我们知道了指针的概念: 指针就是

    2023年04月08日
    浏览(42)
  • C进阶 - 数组和指针

    用英文是因为有些东西得用他们的语言才能表达不失真 栈和堆 In C, a heap is a region of memory that is dynamically allocated during runtime. It is used to store variables and data structures that have a longer lifetime than the function call that created them.The stack, on the other hand, is a region of memory that is used for function

    2024年02月09日
    浏览(39)
  • 【再识C进阶2(中)】详细介绍指针的进阶——函数指针数组、回调函数、qsort函数

    💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库:旭日东升 1👀 🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖        在这一篇博客中,我们要认识并理解 函数指

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包