首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么C中的char数组不需要元素说明符,而整型数组需要?

在C语言中,char数组不需要元素说明符,而整型数组需要的原因是因为C语言中的char类型是一个特殊的数据类型,它表示一个字符,而不是一个整数。在C语言中,字符常量是用单引号括起来的,例如 'A'、'b'、'1' 等。而整型数组则需要元素说明符,因为整型数组中的元素是整数类型,需要指定其数据类型的大小和范围。

char数组的元素是字符类型,它们的大小是固定的,通常为1字节。因此,编译器可以根据char类型的特性来确定数组的大小,而不需要额外的元素说明符。

整型数组的元素是整数类型,其大小和范围取决于具体的整数类型,例如int、long等。由于不同的整数类型在不同的平台上可能有不同的大小和范围,因此在定义整型数组时需要使用元素说明符来指定具体的整数类型,以确保数组的大小和范围是正确的。

总结起来,char数组不需要元素说明符是因为char类型是一个特殊的数据类型,表示一个字符;而整型数组需要元素说明符是因为整数类型的大小和范围可能会因平台而异,需要明确指定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言中柔性数组 C语言结构体charchar用法

,所以要分别管理即申请和释放)如果使用数组,那么只需要一次就可以全部分配出来,反过来,释放时也是一样,使用数组,一次释放,使用指针,得先释放结构体内指针,再释放结构体。...C99使用不完整类型实现柔性数组成员,在C99 ,结构最后一个元素允许是未知大小数组,这就叫做柔性数组(flexible array)成员(也叫伸缩性数组成员),但结构柔性数组成员前面必须至少一个其他成员...c长度为0,因此它不占用test空间,同时stpTest->c就是“hello world”首地址,不需要再使用( char * )( stpTest + 1 )这么丑陋代码了。...那个0个元素数组没有占用空间,而后我们可以进行变长操作了。这样我们为结构体指针c分配了一块内存。用stpTest->c[n]就能简单地访问可变长元素。...直接采用变长数组,只需要分配一次,然后进行取值即可以。

2.7K31

C语言删除无序整型数组重复元素及时间复杂度

遇到一个题,大概要求是写一个函数处理来去掉一个无序整型数组(例如int i_arr[] = { 1, 2, 2, 3, 4, 2, 3, 5 };)重复元素,并返回最终长度。...1 思路 看到这道题时候,第一反应就是需要删除元素,然后联想到单链表。但是后面一想还是不划算,因为单链表还得先把数组元素遍历到链表节点中。...换一下思路,可以先创建另一个整型数组(大小和原数组一样),然后正向遍历数组元素,比较当前元素和它前面所有的元素是否重复,如果这个整数之前没有出现过,那么就放到新数组,于是有了小节2Method1...;另外一种就是不需要创建新数组,在正向遍历数组元素时,比较当前元素和它后面所有的元素是否重复,如果重复就把后面的所有元素向前移动(即覆盖),于是有了小节2Method2。...2 完整程序 程序第104行--j语句非常重要,这是为了避免当前元素连续出现3次(或以上)没有被删除。

10010

C剑指offer】03数组重复元素

文章目录 问题描述 方法一:排序比较 方法二:临时数组 方法三:原地哈希 问题描述 总体分析:只用找出任何一个重复数字,找到返回该值,找不到返回-1,也可以返回其他值,但是绝对不要返回0到n-1这些数...,否则与重复数值可能重复… 方法一:排序比较 最简单思路:先对数组排序,排完序后重复元素肯定挨着,前后两两两比较即可 主函数 int main() { int arr[5] = { 1,2,3,4,3...malloc一个临时数组temp[] (记得初始化位0),将数组arr[]值和temp下标一一对应(映射)起来,例如arr某一个元素是4,那么就把temp[4]这个数组从0变成1,直到temp...数组某一个元素值为2时说明加了两次1,也就是快找到重复元素了,这个元素就是此时temp下标,也就是array[i]....,当前遍历值(a[i])与以该值为索引得到(a[a[i]])数组值相同时,表明该值是重复

35720

c++反转链表m位置到n位置元素_环形数组最大子数组

给定一个由整数数组 A 表示环形数组 C,求 C 非空子数组最大可能和。 在此处,环形数组意味着数组末端将会与开头相连呈环状。...(形式上,当0 = 0 时 C[i+A.length] = C[i]) 此外,子数组最多只能包含固定缓冲区 A 每个元素一次。...(形式上,对于子数组 C[i], C[i+1], …, C[j],不存在 i <= k1, k2 <= j 其中 k1 % A.length = k2 % A.length) 示例 1: 输入:[1,-...2,3,-2] 输出:3 解释:从子数组 [3] 得到最大和 3 示例 2: 输入:[5,-3,5] 输出:10 解释:从子数组 [5,5] 得到最大和 5 + 5 = 10 示例 3: 输入:[3...] 都可以得到最大和 3 示例 5: 输入:[-2,-3,-1] 输出:-1 解释:从子数组 [-1] 得到最大和 -1 题解 求前缀和,对于每一个j,找到[j – k,j)中最小sj,所以可以想到使用滑动窗口求解

1.4K20

数组

该集合各个数据项称为数组元素, 每个元素可用数组名和下标表示。 C程序设计,在数组是一个十分有用数据类型。 下面将对数组进行详细介绍。...名是用户定义数组标识符;方括号常量表达式表示数据元素个数,也称为数组长度。需要注意是,数组元素下标是从0开始计算。...b[0]~b[9] char c[256]; //定义一个数组名为c字符型数组 长度为256,其元素分别是c[0]~c[255] 当在函数只定义数组时,数组值和函数里定义一个变量值一样,都是未初始化过...};//定义一个三行四列二维数组并对其中12(3*4)个元素进行赋值 您可能会想,为什么第二种也可以?...例如: char c[6]={'c', ' h ', 'i', 'n', 'a' , '\0' }; 对字符数组各个元素逐个赋值后,各元素值为: c[0]= 'c',c[1]= 'h',c

86880

【编程基础】C语言指针函数和函数指针

一、指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址表达式。...当然,实际程序,一般也只用到二级指针,三个星号不常见,更别说四个星号了。 指针指针需要用到指针地址。...char c=\'A\'; char *p=&c; char **cp=&p; 通过指针指针,不仅可以访问它指向指针,还可以访问它指向指针所指向数据。...下面就是几个这样例子: char *p1=*cp; char c1=**cp; 你可能想知道这样结构有什么用。利用指针指针可以允许被调用函数修改局部指针变量和处理指针数组。...注意完成上述认为语法为*nm++,它首先取得指针指向内容,然后使指针自增。 注意数组最后一个元素被初始化为0,while循环以次来判断是否到了数组末尾。

2K100

函数指针和指针函数学习小结

虽然数组a只含有a[0]、a[1]、a[2]三个元素,a[3]实际上已经越界,但在分析数组a元素类型时,我们正好需要形式上元素a[3]。知道了a[3]类型,就知道了a元素类型。...就像习武不是为了打人而是为了防身一样,我们了解上述方法是为了看懂别人写复杂声明,不是为了在实践自己去构造这种复杂东东。实在需要复杂声明时,可以用typedef替代一部分。...我们不能理解为:a是一个包含5个元素一维数组,其每个元素又是一个由3个int数构成数组为什么?还是按上面的方法分析,这里从略。...char c='A';         char *p=&c;         char **cp=&p; 通过指针指针,不仅可以访问它指向指针,还可以访问它指向指针所指向数据。...下面就是几个这样例子:         char *p1=*cp;   // (&c)         char c1=**cp; 你可能想知道这样结构有什么用?

1.1K20

C++017-C++指针及其应用

指针 C/C++指针是一种变量,其值为另一个变量地址。指针可以通过解引用操作符(*)用于存储和检索地址所指向值。通过指针,可以在函数之间传递和操作内存数据。...如定义了 int a; int *p=&a; // 则*p 表示 p 指向整型变量 p 存放是变量 a 占用单元起始地址,所以*p 实际上访问了变量 a,也就是说*p 与 a等价。...b 是数组 a 前缀和数组定义: b[i]=a[1]+a[2] +…+a[i],即 b[i]是 a i 个元素和。...:在 OI ,对于大数据可能超空间情况是比较纠结事,用小数组部分分,大数组可能爆空间(得 0 分)。...在被调用函数可以改变字符串内容,在主调函数可以得到改变了字符串。 【例 8】输入一个长度最大为 100 字符串,以字符数组方式储存,再将字符串倒序储存,输出倒序储存后字符串。

15110

C++017-C++指针及其应用

指针 C/C++指针是一种变量,其值为另一个变量地址。指针可以通过解引用操作符(*)用于存储和检索地址所指向值。通过指针,可以在函数之间传递和操作内存数据。...如定义了 int a; int *p=&a; // 则*p 表示 p 指向整型变量 p 存放是变量 a 占用单元起始地址,所以*p 实际上访问了变量 a,也就是说*p 与 a等价。...b 是数组 a 前缀和数组定义: b[i]=a[1]+a[2] +…+a[i],即 b[i]是 a i 个元素和。...:在 OI ,对于大数据可能超空间情况是比较纠结事,用小数组部分分,大数组可能爆空间(得 0 分)。...在被调用函数可以改变字符串内容,在主调函数可以得到改变了字符串。 【例 8】输入一个长度最大为 100 字符串,以字符数组方式储存,再将字符串倒序储存,输出倒序储存后字符串。

14710

C++ fscanf函数分割读取文本文件

format -- 这是 C 字符串,包含了以下各项一个或多个:空格字符、非空格字符 和 format 说明符。...format 说明符形式为 [=%[*][width][modifiers]type=],具体讲解如下: 参数描述*这是一个可选星号,表示数据是从流 stream 读取,但是可以被忽视,即它不存储在对应参数...fscanf 类型说明符:  类型合格输入参数类型c单个字符:读取下一个字符。...如果指定了一个不为 1 宽度 width,函数会读取 width 个字符,并通过参数传递,把它们存储在数组连续位置。在末尾不会追加空字符。...用&是因为要把数存到对应数组元素地址中去。\n是换行读取 } fclose(fq); return 0; }

1.8K00

重读《c primer plus》发现了99%的人都会忽略知识点之声明和初始化

2.你可能忽略知识点 2.1 关于整数类型选择 名称 全称类型说明符 缩写类型说明符 位数 范围 整型 int int 16位 -32768至+32767 无符号整型 unsigned int unsigned...全局声明不要放在.c文件需要放在头文件下。编译器对声明一致性检测,只检测头文件。...2.3.2 extern在变量声明作用 一个.c引用其他.h声明extern 变量,需要在此.c对这个变量用extern声明,例如 //test1.h extern int a; 在test2...extern int a;//只要看到此声明,就知道变量a是全局变量,且在其他源文件是定义过 变量声明有两种情况: 一种是变量存放在堆栈,不用加extern;2、不需要使用存储空间,则要加extern...2.4 复杂声明解读 复杂声明我们可以按照下面的优先级规则: 1.声明中被括号括起来部分 2.后缀操作符: 括号()表示这是一个函数,方括号[]表示这是一个数组

48230

C语言从青铜到王者——数组详解【一维数组、二维数组、字符数组

一维数组 一位数组是最简单数组类型,它定义形式如下: 类型说明符 数组名[常量表达式] 类型说明符数组每个元素类型,常量表达式是数组元素个数 在使用一维数组时候需要留意以下两个要点 常量表达式值必须是正整数...需要注意是,因为定义数组arr仅含有9个元素,所以在使用过程,下标值不能超过8,否则就会出现下标越界错误,示例如下: [image] 在使用数组时候要特别注意数组越界,不然很有可能为自己埋下一颗雷...特殊之处在于它是数组元素为字符数组。其定义一般形式和注意事项与之前讲解一般数组类似,只是其中类型说明符char。...当然,并不是说类型说明符只能是char,也可以是long、int等,但是由于char型只占用一个字节大小,使用long型和int型来定义字符数组会造成资源浪费,因此一般选择使用char型来定义字符数组...看看上面代码定义arr数组,其数组长度为20,初始化字符元素个数为12,初始化字符元素个数小于数组长度,编译器在编译过程中将后面没有初始化数组元素赋值为‘\0’,这也正是打印输出中含有空字符原因

1.5K11

C语言从青铜到王者——数组详解【一维数组、二维数组、字符数组

一维数组 一位数组是最简单数组类型,它定义形式如下: 类型说明符 数组名[常量表达式] 「类型说明符」是数组每个元素类型,常量表达式是数组元素个数 在使用一维数组时候需要留意以下两个要点 常量表达式值必须是正整数...需要注意是,因为定义数组arr仅含有9个元素,所以在使用过程,下标值不能超过8,否则就会出现下标越界错误,示例如下: 在使用数组时候要特别注意数组越界,不然很有可能为自己埋下一颗雷(bug...特殊之处在于它是数组元素为字符数组。其定义一般形式和注意事项与之前讲解一般数组类似,只是其中类型说明符char。...当然,并不是说类型说明符只能是char,也可以是long、int等,但是由于char型只占用一个字节大小,使用long型和int型来定义字符数组会造成资源浪费,因此一般选择使用char型来定义字符数组...看看上面代码定义arr数组,其数组长度为20,初始化字符元素个数为12,初始化字符元素个数小于数组长度,编译器在编译过程中将后面没有初始化数组元素赋值为‘\0’,这也正是打印输出中含有空字符原因

87920

c语言 数组存放规则,C语言数组详解

方括号常量表达式表示数据元素个数,也称为数组长度。 例如: int a[10]; 说明整型数组a,有10个元素。...下标表示了元素数组顺序号。数组元素一般形式为: 数组名[下标] 其中下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。...下标变量和数组说明在形式中有些相似,但这两者具有完全不同含义。 数组说明方括号给出是某一维长度,即可取下标的最大值; 数组元素下标是该元素数组位置标识。...例如: char c[10]; 由于字符型和整型通用,也可以定义为int c[10]但这时每个数组元素占2个字节内存单元。...然后分别输出这四个数组字符串。在前面介绍过,scanf各输入项必须以地址方式出现,如 &a,&b等。但在例4.8却是以数组名方式出现,这是为什么呢?

6.2K30

scanf()函数用法和实践

关键词: scanf() 一、 序言 在CSDN论坛C/C++版块,我时常见到“对于scanf()函数用法、及出现各种错误迷惑”帖子,萌发了我写这篇文章念头。...其调用格式为: scanf("",); 格式化字符串包括以下三类不同字符; 1、 格式化说明符: 格式化说明符与printf()函数格式说明符基本相同。...3、 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同字符。 地址表是需要读入所有变量地址,不是变量本身。这与printf()函数完全不同,要特别注意。...\n"); scanf("%d, %d", &i, &j); } 上例scanf()函数先读一个整型数,然后把接着输入逗号剔除掉,最后读入另一个整型数。...说明: (1) 对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。

75720

江哥带你玩转C语言 | 13- 一级指针和多级指针

那么变量c地址为:0ff05 ---- 什么是指针 在计算机中所有数据都存储在内存单元,每个内存单元都有一个对应地址, 只要通过这个地址就能找到对应单元存储数据....; 指针变量名; 示例: char ch = 'a'; char *p; // 一个用于指向字符型变量指针 p = &ch; int num = 666; int *q; // 一个用于指向整型变量指针...“p=a;”作用是“把a数组元素地址赋给指针变量p”,不是“把数组a各元素值赋给 p” ---- 指针访问数组元素 int main (void) { int a[5]...,允许以下运算: 加一个整数(用+或+=),如p+1 减一个整数(用-或-=),如p-1 自加运算,如p++,++p 自减运算,如p–,--p 如果指针变量p已指向数组一个元素,则p+1指向同一数组下一个元素...,p-1指向同 一数组上一个元素

49700
领券