c语言数组遇上sizeof和strlen
来源:互联网 发布:c语言 fprintf 编辑:程序博客网 时间:2024/04/27 09:48
数组的一些运算
首先,先来看一个例子:
//一维数组 int a[] = {1,2,3,4}; printf("%d\n",sizeof(a));//16(表示数组大小) printf("%d\n",sizeof(a+0));//4(a[0]地址) printf("%d\n",sizeof(*a));//4(对地址解引用,表示首元素) printf("%d\n",sizeof(a+1));//4(a[1]a的地址) printf("%d\n",sizeof(a[1]));//4(a[1]元素) printf("%d\n",sizeof(&a));//4(数组的地址)(还是地址就是4) printf("%d\n",sizeof(&a+1));//4(跳过该数组的下一个数组的地址)(即4后面的地址) printf("%d\n",sizeof(&a[0]));//4(a[0]的地址) printf("%d\n",sizeof(&a[0]+1)); //a[1]的地址
我们都知道sizeof的用法,但她在计算数组时有一些需要注意的地方,在此总结:
1,sizeof内部单独存放数组名,此时表示整个数组
2,&(数组名),此时表示整个数组
除此之外:数组名都表示首元素的地址
牢记这个规则去思考下面的题都是可以解决的 :
//字符数组 char arr[] = {'a','b','c','d','e','f'}; printf("%d\n", sizeof(arr));//6(整个数组的大小) printf("%d\n", sizeof(arr+0));//4(首元素的地址) 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(第二个元素的地址) char arr[] = "abcdef"; printf("%d\n", sizeof(arr));//7(整个数组的大小) printf("%d\n", sizeof(arr + 0));//4(首元素的地址) 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(第二个元素的地址) char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' }; printf("%d\n", strlen(arr));//随机值 printf("%d\n", strlen(arr + 0));//随机值 printf("%d\n", strlen(*arr));//ERR:strlen将97当作地址,不允许访问该空间 printf("%d\n", strlen(arr[1]));//ERR:strlen将98当作地址,不允许访问该空间 printf("%d\n", strlen(&arr));//随机值(从a开始) printf("%d\n", strlen(&arr + 1));//随机值(从f后开始数) printf("%d\n", strlen(&arr[0] + 1));//随机值(从b开始) char arr[] = "abcdef"; printf("%d\n", strlen(arr));//6 printf("%d\n", strlen(arr + 0));//6(第一个元素开始数起) printf("%d\n", strlen(*arr));//ERR:strlen将97当作地址,不允许访问该空间 printf("%d\n", strlen(arr[1]));//ERR:strlen将98当作地址,不允许访问该空间 printf("%d\n", strlen(&arr));//6 printf("%d\n", strlen(&arr + 1));//随机值(跳过整个数组) printf("%d\n", strlen(&arr[0] + 1));//5(从b开始) char *p = "abcdef"; printf("%d\n", sizeof(p));//4(指针变量) printf("%d\n", sizeof(p + 1));//4(地址) printf("%d\n", sizeof(*p));//1(访问一个字符) printf("%d\n", sizeof(p[0]));//1(第一个元素字符) printf("%d\n", sizeof(&p));//4(指针的地址) printf("%d\n", sizeof(&p + 1));//4(p地址的下一个地址) printf("%d\n", sizeof(&p[0] + 1));//4(b的地址) printf("%d\n", strlen(p));//6 printf("%d\n", strlen(p + 1));//5 printf("%d\n", strlen(*p));//ERR:strlen(97)不允许访问 printf("%d\n", strlen(p[0]));//ERR printf("%d\n", strlen(&p));//随机值(p的地址向后找) printf("%d\n", strlen(&p + 1));//随机值(跳过p的地址向后找) printf("%d\n", strlen(&p[0] + 1));//5(b的地址向后找)
在这里,区分一下sizeof和strlen
sizeof:运算符。功能:获得保证能容纳实现所建立的最大对象的字节大小。
sizeof后面如果是类型必须加(),变量名可以不加。(建议:最好都加)
strlen:函数。
功能:返回字符串的长度。从字符串第一个地址开始遍历,直到遇到结束标志‘\0’结束。参数为字符指针类型。
阅读全文
0 0
- c语言数组遇上sizeof和strlen
- c语言中的数组sizeof和strlen
- C语言sizeof和strlen
- C语言sizeof和strlen
- c语言之数组 sizeof strlen
- C语言的sizeof和strlen
- C语言sizeof 和 strlen 的区别
- C语言的sizeof和strlen
- C语言的sizeof和strlen
- C语言的sizeof和strlen
- c语言实现strcmp和strlen、sizeof
- C语言sizeof 和 strlen 的区别
- 不一样的C语言-当sizeof遇上数组名
- 【c语言】strlen与sizeof对数组和指针的求法
- C语言中 数组的运算及sizeof()和strlen()操作符的简单介绍
- c语言数组、sizeof()及strlen()
- C中 字符数组和字符串以及strlen 和sizeof
- sizeof和strlen和C语言下的字符串
- ######mybatis页面get请求传参乱码,controller接收到乱码(特殊字符,不是问号那种)
- 机器学习-推荐系统
- PYTHON数据可视化(二)
- HTTPS协议--HTTPS权威指南:在服务器和Web应用上部署SSL/TLS和PKI (/book/1734)
- F745VGTx_HAL_GPIO
- c语言数组遇上sizeof和strlen
- 【机房管理】报表1
- Google提出的新型激活函数:Swish
- Arduino--基础(三)--0.96英寸的OLED的使用
- 实现一个函数,判断一个数是不是素数
- MySQL表复制
- leetCode-Two Sum
- 算术表达式转成后缀表达式
- 用ant自动compile|run|package spark程序