首页 > 其他分享 >C语言——数组、sizeof关键字

C语言——数组、sizeof关键字

时间:2024-07-13 14:58:44浏览次数:8  
标签:int 元素 bytes C语言 关键字 数组 sizeof array

一、数组

1.数组的引入与定义: 

C语言中的数组是一种基本的数据结构,用于在计算机内存中连续存储相同类型的数据。数组中的每个元素可以通过索引来访问,索引通常是一个整数,用于指定元素在数组中的位置。在C语言中,数组索引是从0开始的。

 要使用数组,必须在程序中先定义数组,即通知计算机:由哪些数据组成数组,数组中有多少元素,属于哪个数据类型。否则计算机不会自动地把一批数据作为数组处理。例如,下面是对数组的定义:

type arrayName[arraySize];
  • type 指定数组中元素的类型(如 intfloatchar 等)。
  • arrayName 是数组的名称。
  • arraySize 是数组中元素的数量,它必须是一个常量表达式,并且指定了数组的大小。

2.数组的初始化:

(1)全部赋值

在定义数组时对全部数组元素赋予初值。例如:

int a[10] = {0,1,2,3,4.5,6,7.8,9};


将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为“初始化列表”。经过上面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。

(2)部分赋值

 可以只给数组中的一部分元素赋值。例如:

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

定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元赋初值,系统自动给后5个元素赋初值为0。

(3)初始化为0

如果想使一个数组中全部元素值为0,可以写成

int a[10]={0,0,0,0,0,0,0,0,0,0};

int a[10] = {0};     //未赋值的部分元素自动设为0
(4)不定义数据长度

在C语言中,可以在声明数组的同时初始化它,例如:

int numbers[] = {1, 2, 3, 4, 5};  
char letters[] = {'a', 'b', 'c', 'd', 'e'};

注意,如果在声明时初始化数组但未指定大小,编译器会自动根据初始化列表中元素的数量来确定数组的大小。

3.访问数组元素:

通过指定数组的索引(位置)来访问数组中的元素,例如:

int secondNumber = numbers[1]; // 访问 numbers 数组中的第二个元素(索引为1)  
char firstLetter = letters[0]; // 访问 letters 数组中的第一个元素(索引为0)

4.数组的遍历:

遍历数组即访问数组中的每个元素。这通常通过循环实现,例如使用 for 循环:

for(int i = 0; i < 5; i++) {  
    printf("%d ", numbers[i]);  
}

这段代码会打印出 numbers 数组中的所有元素。

5.简单示例:

#include<stdio.h>

int main()
{
	int data = 1;
	int array[]={0,0,0,0,0};
	int arraySize;
	
	for(int i = 0;i < 5;i++){
		array[i] = data + 10;
		data++;
		printf("array[%d]address=%p,array[%d]=%d\n",i,&array[i],i,array[i]);
	}
	
	arraySize = sizeof(array)/sizeof(array[0]);
	printf("数组array的长度为:%d",arraySize);
	
	return 0;
}

输出将是:

array[0]address=000000000061FE00,array[0]=11
array[1]address=000000000061FE04,array[1]=12
array[2]address=000000000061FE08,array[2]=13
array[3]address=000000000061FE0C,array[3]=14
array[4]address=000000000061FE10,array[4]=15
数组array的长度为:5

由此我们可以看出,数组中存放的数据的地址是连续的。

6.注意事项:

  • 数组的大小在声明时确定,并且之后不能改变。
  • 访问数组元素时,索引必须在有效范围内(即 0 到 arraySize - 1)。如果尝试访问超出这个范围的元素,将会导致未定义行为,通常是程序崩溃。
  • 在C语言中,数组名通常代表数组首元素的地址。因此,在某些上下文中,数组名可以被用作指向其第一个元素的指针。

数组是C语言中非常基本且强大的数据结构,它们允许我们 以紧凑和高效的方式处理一系列相同类型的数据。 

二、sizeof关键字

sizeof 是 C 语言(以及 C++、C# 等多种编程语言)中的一个操作符,用于在编译时计算对象或类型所占的内存空间大小(以字节为单位)。它返回的是一个无符号整数(size_t 类型),表示了请求的对象或类型在内存中占用的字节数。

1.使用方式:

sizeof 可以用于计算变量、类型、数组、结构体(包括联合体)、指针等的大小。其使用方式主要有两种:

  1. 计算变量或数组的大小sizeof(variable_name) 或 sizeof array_name。注意,对于数组,不论是否指定了数组索引,sizeof 返回的都是整个数组的大小。

  2. 计算类型的大小sizeof(type),其中 type 可以是基本数据类型(如 intfloatchar 等),也可以是用户定义的类型(如结构体、联合体等)。

2.示例:

#include <stdio.h>  
  
int main() {  
    int a = 5;  
    char b = 'A';  
    double c = 3.14;  
  
    printf("Size of int: %zu bytes\n", sizeof(a));  
    printf("Size of char: %zu bytes\n", sizeof(b));  
    printf("Size of double: %zu bytes\n", sizeof(c));  
  
    // 数组示例  
    int arr[10];  
    printf("Size of arr: %zu bytes\n", sizeof(arr)); // 整个数组的大小  
    printf("Size of arr[0]: %zu bytes\n", sizeof(arr[0])); // 数组中单个元素的大小  
  
    // 结构体示例  
    struct MyStruct {  
        int x;  
        char y;  
        double z;  
    };  
  
    printf("Size of struct MyStruct: %zu bytes\n", sizeof(struct MyStruct));  
  
    return 0;  
}

输出将是:

Size of int: 4 bytes
Size of char: 1 bytes
Size of double: 8 bytes
Size of arr: 40 bytes
Size of arr[0]: 4 bytes
Size of struct MyStruct: 16 bytes

3.注意事项

  • sizeof 是在编译时计算的,因此其结果是一个常量表达式。
  • 对于指针,sizeof 返回的是指针本身的大小,而不是指针所指向的内存区域的大小。在不同的系统和编译器中,指针的大小可能不同(通常是 4 字节或 8 字节)。
  • 结构体(和联合体)的大小可能会受到内存对齐(padding)的影响,导致实际占用的内存大小大于其成员大小的总和。
  • 数组名在表达式中会被转换为指向数组首元素的指针,但只有在 sizeof 操作符中,数组名才表示整个数组的大小。

标签:int,元素,bytes,C语言,关键字,数组,sizeof,array
From: https://blog.csdn.net/weixin_45720999/article/details/140395391

相关文章

  • const关键字
    目的:是一种机制可以让代码更加干净,用来规范开发人员有点类似可见性的概念。写法1constint*a=newint;//修饰的inta表面不能修改解引用的内容intb=1;constinta=&b;a=7//会报错;写法2intconsta=newint;//不能修改指向的地址;intc=0;a=&0;//会报错写法3constint......
  • 帝国CMS网站系统内置关键字字段说明
    1、newstext:内容字段newstext字段为自动就是编辑器,一般用于新闻内容字段。支持内容关键字替换、替换过滤字符、支持远程保存内容里的图片/FLASH、支持自动分页、支持设置第几张上传图为标题图片。2、smalltext:简介字段smalltext字段一般用于简介内容,可自动截取newstext字......
  • C语言内存管理深度解析
    第一章基础概念梳理1.1堆与栈的区别在C语言中,堆和栈是两种重要的内存管理机制,它们之间存在显著的区别。首先,栈内存是由编译器自动分配和释放的,其操作方式类似于数据结构中的栈,遵循后进先出(LIFO)的原则。每当一个函数调用发生时,就会在栈上分配一块内存用于存储该函数的局部变......
  • C语言菜鸟学习(函数)
    引入C语言本身就是由多个函数模块组成,在C语言本身自带的头文件中,也有很多被封装好的函数,在初学C语言时,我们最先使用的就是使用printf()函数输出一个“helloworld”;而printf()函数就是被封装在#include<stdio.h>头文件中的。但是经过封装的函数我们无法看到源代码,在实际开发中......
  • C语言——练习:水仙花数、n次幂值的计算
    1.输入一个数判断是否是水仙花数,并输出100—999之间所有的水仙花数水仙花数(Narcissisticnumber),也被称为超完全数字不变数(pluperfectdigitalinvariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrongnumber),是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和......
  • 在VSCODE中创建C语言环境,编译、运行、调试。
    1、安装MinGWMinGW-w64-for32and64bitWindowsdownload|SourceForge.net下载下来是一个压缩包对压缩包解压得到文件夹mingw64将文件夹mingw64剪切到C:\ProgramFiles目录下配置环境变量点击系统变量里面的Path将C:\ProgramFiles\mingw64\bin目录添加......
  • Java基础之——final关键字的使用
    #Java基础复习##参考文章:Java:final关键字的作用(方法、变量、类)_java语言中在类定义时使用final关键字修饰是指这个类-CSDN博客#一、理解含义final是Java中一个保留的关键字,可以用于修饰变量、方法和类。任何实体(变量,方法或类)一旦被声明final后,只能分配(赋值)一次。也就是......
  • 【C语言】字符串与相关操作函数
    字符串思路分析在注释文章目录字符串一、字符串的定义1.使用sizeof()计算他们的长度二、sizeof和strlen的区别1.sizeof操作符2.strlen函数三、动态开辟字符串1.malloc函数2.realloc函数3.free函数4.memset函数四、几种字符串常用的API1.strncpy函数2.asse......
  • C语言-分支与循环(1)
    目录1、if语句1.1if1.2else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题(多个if和一个else对应关系)2、switch语句2.1switch语句中的break2.2switch语句中的default2.3switch语句中的case和default的顺序问题3、关系操作符4、条件操作符4.1什么是条件......
  • 实现猜数字游戏(C语言)
    简单版本#include<stdio.h>#include<stdlib.h>#include<time.h>#include<Windows.h>#include<string.h>voidmenu(){ chararr[]="************************"; chararr1[]="--Welcometomygame!!--"; int......