C中关于数组以及数组的简单运算
来源:互联网 发布:文艺复兴 知乎 编辑:程序博客网 时间:2024/05/20 00:49
1.如何创建一个数组
通常我们创建数组使用来储存程序所需要的数据。
数组创建的一般格式为:类型标识符 数组名[常量表达式]。
eg:我们要创建一个包含十个数的整形数组,我们可以创建为int arr[10],其中长量表达式部分可以包括常量,常变量和符号常量,但不能包含变量。
2.关于数组的初始化
eg:arr[4]={0};
arr[4]={1,2,3};
arr[4]={1,[2]=2,3};
如上所示,我们用花括号括起来,以逗号将值分隔起来来初始化数组。上式1是将数组中4个元素都赋值成了0;上式2将数组的第一,二,三隔元素分别赋值成了1,2,3,即a[0]=1,a[1]=2,a[2]=3,其余元素默认赋初值为0。上式3是将a[0]=1,a[2]=2,a[3]=,其余元素默认赋初值为0。我们可以看到,可以在初始化列表中使用带方括号的下标指明待初始化的元素(当然这个前提这个程序是在支持C99的编译器下)。
3.关于数组的sizeof运算
对于sizeof,如果它内部单独存放数组名,则数组名表示的是整个数组,sizeof计算的是数组的总大小。下面我将举例说明:
首先我们定义一个数组:int a[]={1,2,3,4};
printf("%d\n", sizeof(a)); //16 数组名单独放在sizeof内部表示的是整个数组,所以是计算整个数组的大小,一个int占4个字节,所以4*4=16 printf("%d\n", sizeof(a+0)); //4 数组名不是单独放在sizeof内部,所以表示的是数组首元素的地址,(a+0)表示的是数组第一个元素的地址,地址的大小为4个字节 printf("%d\n", sizeof(*a)); //4 数组名表示的是数组首元素的地址,*a代表数组首元素,大小为4个字节 printf("%d\n", sizeof(a+1)); //4 数组第二个元素 printf("%d\n", sizeof(a[1])); //4 数组第二个元素,相当于*(a+1) printf("%d\n", sizeof(&a)); //4 数组名表示首元素的地址,再取地址,遍历整个数组,数组的地址大小为4个字节 printf("%d\n", sizeof(*&a)); //16 &a表示整个数组的地址,*&a表示整个数组的大小 printf("%d\n", sizeof(&a+1)); //4 跳过整个数组后面的地址,4 个字节 printf("%d\n", sizeof(&a[0])); //4 第一个元素的地址 printf("%d\n", sizeof(&a[0]+1)); //4 第二个元素的地址
强调一点,地址都是4个字节的大小
接下来我们定义一个字符型数组,加深一下理解.
char a[]={‘a’,’b’,’c’,’d’,’e’,’f’,}
printf("%d\n", sizeof(a)); //6 整个数组的大小 printf("%d\n", sizeof(a+0)); //4 数组首元素的地址 printf("%d\n", sizeof(*a)); //1 数组首元素,char类型大小为一个字节 printf("%d\n", sizeof(a[1])); //1 第二个元素 printf("%d\n", sizeof(&a)); //4 整个数组的地址 printf("%d\n", sizeof(*&a)); //6 整个数组的大小 printf("%d\n", sizeof(&a+1)); //4 跳过整个数组的下一个数组的地址 printf("%d\n", sizeof(&a[0])); //4 第一个元素的地址 printf("%d\n", sizeof(&a[0]+1)) //4 数组第二个元素的地址
char a[]=”abcdef”
printf("%d\n", sizeof(a)); //7 数组的大小,包括‘\0’ printf("%d\n", sizeof(a+0)); //4 第一个元素的地址 printf("%d\n", sizeof(*a)); //1 首元素 printf("%d\n", sizeof(a[1])); //1 第二个元素 printf("%d\n", sizeof(&a)); //4 整个数组的地址 printf("%d\n", sizeof(*&a)); //7 整个数组的大小 printf("%d\n", sizeof(&a+1)); //4 跳过整个数组的下一个数组的地址 printf("%d\n", sizeof(&a[0])); //4 第一个元素的地址 printf("%d\n", sizeof(&a[0]+1)) //4 第二个元素的地址
char *p=”abcdef”
printf("%d\n", sizeof(p)); //4 指针变量大小为4 个字节 printf("%d\n", sizeof(p+1)); //4 指针变量等价于地址,对地址加1还是地址 printf("%d\n", sizeof(*p)); //1 第一个字符的大小 printf("%d\n", sizeof(p[0])); //1 等价于*(p+0),表示第一个字符的大小 printf("%d\n", sizeof(&p)); //4 表示p的地址 printf("%d\n", sizeof(&p+1)); //4 p的下一个地址 printf("%d\n", sizeof(&p[0]+1)); //4 第二个字符的地址
4.关于数组的strlen运算
strlen用来计算字符串s的长度(其中s为无符号整型),不包括’\0’,即遇到’\0’为止。
首先我们定义一个字符型数组char a[] = { ‘a’,’b’,’c’,’d’,’e’,’f’ }
printf("%d\n", strlen(a)); //随机值 因为无结束标志'\0',函数会一直查下去在未知的地方遇到'\0'并报值 printf("%d\n", strlen(a+0)); //随机值 同1) printf("%d\n", strlen(*a)); //error 首元素'a'的ASCII值为97,从97开始向后找,97不是一个有效的地址值 printf("%d\n", strlen(a[1])); //error 同上 printf("%d\n", strlen(&a)); //随机值,从首元素地址向后找,无技术标志 printf("%d\n", strlen(&a+1)); //随机值 从整个数组后开始找,随机 printf("%d\n", strlen(&a[0]+1)); //随机值 从数组第二个元素地址开始查找
char a[]=”abcdef”
printf("%d\n", strlen(a)); //6 字符串的长度,不包括'\0' printf("%d\n", strlen(a+0)); //6 从第一个字符开始数,遇到'\0'为止 printf("%d\n", strlen(*a)); //error *a=*(a+0)=a[0],'a'对应的ASCII值为97,不是一个有效的地址 printf("%d\n", strlen(a[1])); //error a[1]表示第二个元素的地址,'b'的ASCII码值为98,不是一个有效的地址 printf("%d\n", strlen(&a)); //6 表示整个数组的地址,即a[0]的地址,从a[0]的地址开始找'\0' printf("%d\n", strlen(&a+1)); //随机值 跳过了整个数组,包括'\0' printf("%d\n", strlen(&a[0]+1)); //5 从arr[0]的地址开始找'\0'
char *p=”abcdef”
printf("%d\n", strlen(p)); //6 内存放首字符地址,遇到'\0'为止 printf("%d\n", strlen(p+1)); //5 从第二个字符开始,遇到'\0'为止 printf("%d\n", strlen(*p)); //error 将'a'的ASCII值地址传入后,非法访问 printf("%d\n", strlen(p[0])); //error 同上 printf("%d\n", strlen(&p)); //随机值 从第一个字符当中的地址开始查找,'\0'不确定找到 printf("%d\n", strlen(&p+1)); //随机值 从第二个字符当中地址开始查找,'\0'不确定找到 printf("%d\n", strlen(&p[0]+1)); //5 从第二个字符开始查找,遇到'\0'为止
关于数组的sizeof和strlen运算就和大家分享到这了。如有错误,希望大家可以指正。本篇所写程序都是在32位的电脑下运行的,统一使用的是vs2015编译。
- C中关于数组以及数组的简单运算
- C中数组以及数组相关的简单运算
- C语言中关于数组的运算
- c语言中关于数组的一些基本运算
- C语言中 数组的运算及sizeof()和strlen()操作符的简单介绍
- 一些简单的数组运算
- 数组的一些简单运算
- 关于C语言中数组的使用
- 数组--C语言中关于数组的小问题
- C语言中关于数组、指针以及函数的一些基本知识
- linux c 中关于指针常量和常量指针以及数组的关系与区别
- C语言中有关一维数组的一些运算
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- cuda 简单数组运算
- 关于C、C++、Java中数组的使用
- 指针数组的要运用和运算以及类的简单阐述
- 关于C中字符数组,字符指针以及C++中string类型的两两转换及排序
- objective-C中数组的内存管理机制以及遍历
- 动态规划 最长公共子序列
- Python Flask在Windows下的环境配置
- Lua的pcall函数
- hdu5015——233 Matrix(矩阵快速幂)
- 记一次synchronized锁字符串引发的坑兼再谈Java字符串
- C中关于数组以及数组的简单运算
- 13.模块与包
- debug--process
- java.sql.SQLException: 无法从套接字读取更多的数据
- Glide详解(基础篇)
- 编程题(4):餐馆
- WAV格式音频文件头文件格式以及C++读取
- 动态规划 怪盗基德的滑翔翼
- Ubuntu adb devices : no permissions 解决方法