C语言中有关一维数组的一些运算
来源:互联网 发布:儿童怎么学英语 知乎 编辑:程序博客网 时间:2024/05/16 09:46
在学习C语言一维数组有关计算中,有关sizeof和strlen的的计算我们必须掌握!
一、sizeof
有两种情况出现时,在运算中代表整个数组:
(1)当数组名arr单独放在sizeof()内部时,即:sizeof(arr);单位字节
(2)当数组名arr单独放在&后面时,即:&a;
除以上两种情况外,其余情况都代表数组首元素的地址。
二、strlen
strlen()用于计算指定字符串的长度,它会从数组首元素的地址开始一直找下去,直至遇到结束字符“\0”时停止,在计算长度时不包括"\0"。
下面我们通过以下例子来掌握此类计算(其中 整型int 大小为四个字节,字符型char 大小为一个字节):
例一:
#include<stdio.h>int main(){int arr[] = { 1, 2, 3, 4 };// 4个元素printf("%d\n", sizeof(arr));//16 数组名单独放在sizeof内部时表示整个数组printf("%d\n", sizeof(arr+0));//4 数组首元素的地址加0,仍然代表数组首元素的地址printf("%d\n", sizeof(*arr));//4 数组首元素的大小printf("%d\n", sizeof(arr+1));//4 数组首元素地址加1,表示数组第二个元素的地址printf("%d\n", sizeof(arr[1]));//4 数组第二个元素的大小printf("%d\n", sizeof(&arr));//4 数组首元素的大小printf("%d\n", sizeof(*&arr));//16 数组指针解引用来管理整个数组的大小,此处相当于sizeof(arr)printf("%d\n", sizeof(&arr+1));//4 跳过整个数组arr之后的数组地址大小printf("%d\n", sizeof(&arr[0]));//4 数组首元素的地址printf("%d\n", sizeof(&arr[0]+1));//4 数组第二个元素的地址return 0;}例二:
#include<stdio.h>int main(){char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };// 6个元素(该数组无'\0')printf("%d\n", sizeof(arr));//6 整个数组的大小printf("%d\n", sizeof(arr+0));//4 数组首元素地址加0,仍表示数组首元素的大小printf("%d\n", sizeof(*arr));//1 数组名代表数组首元素的地址,数组首元素的地址解引用,代表数组首元素的大小printf("%d\n", sizeof(arr[1]));//1 第二个元素的大小printf("%d\n", sizeof(&arr));//4 数组首元素的大小printf("%d\n", sizeof(&arr+1));//4 跳过整个数组之后的下一个元素大小指向f的后面printf("%d\n", sizeof(&arr[0]+1));//4 第二个元素的地址printf("%d\n", strlen(arr));//随机值 由于该数组无'\0'printf("%d\n", strlen(arr+0));//随机值 数组首元素加0,表示从数组第一个元素开始printf("%d\n", strlen(*arr));//X *arr表示数组首元素,即'a',也就是从地址为97开始找,但由于97是一个未知的地址,不允许访问,程序会报错printf("%d\n", strlen(arr[1]));//X 本题和上题出现了同样的错误,从'b'之后开始找,程序会报错printf("%d\n", strlen(&arr));//随机值 从数组首元素开始一直找下去 printf("%d\n", strlen(&arr+1));//随机值 跳过整个数组开始,一直找下去,和上题相差6 printf("%d\n", strlen(&arr[0]+1));//随机值 数组第二个元素b的地址开始,一直找下去 return 0;}例三:
#include<stdio.h>int main(){char arr[] = "abcdef";//7个元素(该数组有'\0')printf("%d\n", sizeof(arr));//7 整个数组printf("%d\n", sizeof(arr+0));//4 数组名代表数组首元素的地址,加0仍然是数组首元素的地址printf("%d\n", sizeof(*arr));//1 数组名代表数组首元素的地址,数组首元素的地址解引用代表数组首元素printf("%d\n", sizeof(arr[1]));//1 数组第二个元素bprintf("%d\n", sizeof(&arr));//4 数组首元素的地址printf("%d\n", sizeof(&arr+1));//4 跳过整个数组后的下一个元素地址printf("%d\n", sizeof(&arr[0]+1));//4 数组第二个元素b的地址printf("%d\n", strlen(arr));//6 整个数组元素个数,遇'\0'停止,不计算'\0'printf("%d\n", strlen(arr+0));//6 从数组第一个元素开始printf("%d\n", strlen(*arr));//X *arr表示数组首元素,即'a',也就是从地址为97开始找,但由于97是一个未知的地址,不允许访问,程序会报错printf("%d\n", strlen(arr[1]));//X 本题和上题出现了同样的错误,从'b'之后开始找,程序会报错printf("%d\n", strlen(&arr));//6 从数组首元素开始,遇'\0'停止printf("%d\n", strlen(&arr+1));//随机值 跳过整个数组后,到数组结束的个数printf("%d\n", strlen(&arr[0]+1));//5 从数组第二个元素开始,到数组结束的个数 return 0;}
阅读全文
1 0
- C语言中有关一维数组的一些运算
- c语言中关于数组的一些基本运算
- C语言中关于数组的运算
- C 语言中有关常见的运算符问题
- 黑马程序员-C语言中有关宏的一些注意事项
- C语言中有关二维数组的指针问题
- c语言中关于一维数组的指针访问
- c语言中数组和数组的一些计算
- C语言中动态分配数组(一维)
- 有关c语言的一些迷惑
- 有关数组的运算
- 有关数组的运算
- C语言--有关数组的计算
- 有关C语言中有符号/无符号数混合运算的小问题
- 有关C语言中有符号/无符号数混合运算的小问题
- 有关C语言中有符号/无符号数混合运算的小问题
- 对C语言一些个人见解系列:指针和一维数组的关系
- c语言中二维数组的一些试验结果
- 设计模式六大原则
- FZU2282Wand (组合数学+错排应用)
- python找到两个有序列表的中位数
- hdu1246递推
- 找出符合以下条件的Troitsky数,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍
- C语言中有关一维数组的一些运算
- JavaSE-5
- (9)Mysql存储引擎
- 数组Array的应用
- Java学习路线图
- ZOJ 2849 Attack of Panda Virus(BFS+优先队列)
- 树1——创建与插入节点
- 函数节流
- C语言(Head First C)-3:字符串