C语言中怎么求动态数组大小

先来个简单的例子

int a[] = {1,2,3};

int arr_len = 0;

arr_len = sizeof(a)/sizeof(int);

解释:sizeof() 关键字是求出对象所占用的内存空间的大小,so, sizeof(a)是算出整个数组占用的空间的大小。

因为是整数数组,一个整数在32位系统上占用4个字节,不同的系统数值可能不同, 用sizeof(int)可以计算出

一个整数占用的内存空间大小。所以用sizeof(a)/sizeof(int)数组中有几个整数,也即算出了数组的大小。

下边来个指针数组

char *str[] = {"John", "Jim"};

int str_len = 0;

str_len = sizeof(str)/sizeof(char*);

指针数组顾名思义数组中存放的都是指针,字符指针。我们可以用char *p = "I‘m a worker.";

指向一个字符串常量,而把这些指针放在一起不就是上边说的指针数组吗。或许我们用

char*     str[]更能显示的看出上边是指针数组。既然是指针数组那sizeof(str)不就是几个指针占用的空间大小嘛。那除以一个指针所

占用的空间大小不就可以计算出字符指针数组的大小了。

把上边的例子变下

char str[][20] = {"John", "Jim"};

int str_len = 0;

str_len = sizeof(str)/20*sizeof(char);

字符指针数组变成了字符的二维数组。

二维动态数组我们可以看成一个行不固定,列固定(20)的一个表。我们所要计算的就是有几行。sizeof(str)就是计算出这个表占用的总空间的大小,

总空间的大小除以一行占用的空间大小就可以计算出有几行。那一行占用多大空间呢。我们知道一个单元格中存放的是一个char字符sizeof(char)就可以计算出一个单元格所占用的空间大小,那乘以列数(20)就算出一行占用空间的大小了。

C语言中怎么求动态数组大小

时间: 2024-10-21 21:15:33

C语言中怎么求动态数组大小的相关文章

C语言中的指针与数组

1.指针与数组 1)指针与一维数组 i.数组指针(指向数组元素的指针) 类型  *指针变量名: 指针定义完成后要初始化(不想让指向任何内容,=0,=NULL) int a[10]; int *p = &a[0];   // &a[0] == a int *p1 = a; ii.用数组的指针访问数组元素 偏移:指针变量的偏移 p1 = p1+1;    //向下偏移1个一个数组元素 p1++;   //p1中存放的还是地址 .... 如果用指针访问第i个元素 p1+i 取出pi指向的元素的值

C语言中的函数、数组与指针

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原型

C语言中值得深入知识点----数组做函数参数、数组名a与&a区别、数组名a的"数据类型"

1.数组作为函数参数 C语言中,数组做为函数的参数,退化为指针.数组作为参数传给函数时,传的是指针而不是数组,传递的是数组的首元素的地址.这里我们以将以整形变量排序来讲解. void sortArray(int a[] ,int num )以及void sortArray(int a[100] ,int num )都可以用void sortArray(int *a ,int num )表示.一般来说函数参数如果为数组,可以有两个参数,一个是数组名,一个是数组长度.对于排序而已,一般是要知道给定数

C语言中的指针和数组

下面的内容节选自由我所执笔的会议记录.对于本文的不足之处,各位可以提出自己的看法. Q1:指针和数组到底是怎么一回事? A:指针和数组有本质的不同.指针就是一个内存地址,在32位系统下,一个指针永远占4个字节:数组是一块连续的内存空间,我们从一个已定义的数组中可以获得数组大小以及这块连续内存空间的起始地址.这个起始地址即数组首元素的地址,更具体的说是数组中首个元素的首地址. 在C语言中,只有一维数组.但是,当一个一维数组的元素是仍然是一维数组时,就形成了所谓的一维数组.如何印证这一点?二维数组在

C语言中的指针与数组的关联1

在C语言中,指针是一种类型,存放的是地址,例如char*p,这里p存放的是字符型数据的地址,int*p,p存放的是整形数据的地址,我们可以通过解运用*来获取该地址所指向的内容.而数组则是一种数据类型的集合,如int arr[]={1,2,3,4,5,6,7,8,9,10};这里声明与定义了一个整形数组,而char arr[]="hello world";则是声明与定义了一个字符类型的数组,这个数组内存放的是一个字符串. C语言规定,在大多数情况下数组名其实质就是数组元素的首地址,所以我

深入理解C语言中的指针与数组之指针篇(转载)

前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情,一直没有时间静下心来写这些东西,毕竟这确实是一件非常耗费时间和精力的事情:一方面,个人对C语言的掌握和理解也还有限,怕写出来的东西会对大家造成误导.当然,今天写的这些东西也肯定存在各种问题,不严谨甚至错误的地方肯定有,也希望大家来共同探讨,相互改进. 我会慢慢的写完这几章,有想法的童鞋可以和我探讨

C语言中的指针与数组的定义与使用

指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 全局变量 内存映射 可以对内存的内容修改修改硬盘的内容 一般在数据库中经常使用 内存的分配与释放 c语言分配内存的方法 // malloc(需要分配的大小): 这里的分配的大小需要对齐的2的指数 void *mem = malloc(size); 释放内存 // 一般分配的内容都是在堆空间中的 //

java中如何实现动态数组的创建与赋值

最近,项目中需要实现:提取一组数据,每个数组都有自己的属性,这组数据的长度又未知,还可能变长,变短,我考虑一会,实现如下: 1.在oncreate前面,我声明两个数组 String  data1[ ][ ]://使用的时候,比如和adapter关联 String  data2[ ][ ]://提取数据,我这里是Poisaerh出来的数据 2.实例化数组,提取数据,判断二维数据的维数个数,比如我这里得知,有五个数据,每个数据有五个属性 data2 = new String[5][5]; //实例化

c++中new分配动态数组

变长一维数组     这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组.实现变长数组最简单的是变长一维数组,你可以这样做: //文件名: array01.cpp #include<iostream> using namespace std; int main() { int len; cin>>len; //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 int *p=new int[len]; ...........