当前位置:网站首页>详解sizeof、strlen、指针和数组等组合题
详解sizeof、strlen、指针和数组等组合题
2022-07-03 08:15:00 【珠江上上上】
本部分属于C语言高级玩法
目录
本部分属于指针、数组、sizeof和strlen组合在一起的高级玩法,助你轻松拿下!
1.坑点总结
2.题目解析
坑点总结
1. sizeof
①sizeof(数组名);这里的数组名表示整个数组,而不是整个数组的地址
②sizeof 是操作符,计算变量的类型所占内存空间的大小,单位是字节,不关注内存中存放的内容
③sizeof是根据类型分析,不会访问具体内容
④printf("%d\n",sizeof(指针)),得到的大小是4个字节(在x86环境下)或8个字节(在x64环境下)
2. strlen
①strlen 是库函数,使用时需要引头文件<string.h>,专门求字符串长度,只能针对字符串,向后一直找\0,统计\0之前的字符个数
②strlen()只可以接收地址,strlen('a')或strlen(97),属于非法访问,是个野指针!
题目解析
以下题目包含了对数组名的理解、指针的运算和指针类型的意义等非常重要的知识点,
//一维数组
重点总结:
①sizeof()只关注括号中的类型,不关注其内容
②sizeof(指针)则答案为4个字节或者8个字节
int a[ ] = {1,2,3,4};
printf("%d\n",sizeof(a));得16
printf("%d\n",sizeof(a+0));得4或8
printf("%d\n",sizeof(*a));得4
printf("%d\n",sizeof(a+1));得4或8
printf("%d\n",sizeof(a[1]));得4
printf("%d\n",sizeof(&a));得4或8
printf("%d\n",sizeof(*&a));得16
printf("%d\n",sizeof(&a+1));得4或8
printf("%d\n",sizeof(&a[0]));得4或8
printf("%d\n",sizeof(&a[0]+1));得4或8
//字符数组
重点总结:
①strlen()的括号中只能存放地址,并沿着这个地址一直向后寻找 \0
②字符指针存放的是第一个字符的地址,和这个指针的地址不是同一个地址
char arr[ ] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));得6
printf("%d\n", sizeof(arr+0));得4或8
printf("%d\n", sizeof(*arr));得1
printf("%d\n", sizeof(arr[1]));得1
printf("%d\n", sizeof(&arr));得4或8
printf("%d\n", sizeof(&arr+1));得4或8
printf("%d\n", sizeof(&arr[0]+1));得4或8
printf("%d\n", strlen(arr));得随机值
printf("%d\n", strlen(arr+0));得随机值
printf("%d\n", strlen(*arr));得error
printf("%d\n", strlen(arr[1]));得error
printf("%d\n", strlen(&arr));得随机值
printf("%d\n", strlen(&arr+1));得随机值-6
printf("%d\n", strlen(&arr[0]+1));得随机值-1
char arr[ ] = "abcdef";
printf("%d\n", sizeof(arr));得7
printf("%d\n", sizeof(arr+0));得4或8
printf("%d\n", sizeof(*arr));得1
printf("%d\n", sizeof(arr[1]));得1
printf("%d\n", sizeof(&arr));得4或8
printf("%d\n", sizeof(&arr+1));得4或8
printf("%d\n", sizeof(&arr[0]+1));得4或8
printf("%d\n", strlen(arr));得6
printf("%d\n", strlen(arr+0));得6
printf("%d\n", strlen(*arr));得error
printf("%d\n", strlen(arr[1]));得error
printf("%d\n", strlen(&arr));得6
printf("%d\n", strlen(&arr+1));得随机值
printf("%d\n", strlen(&arr[0]+1));得5
char *p = "abcdef";
printf("%d\n", sizeof(p));得4或8
printf("%d\n", sizeof(p+1));得4或8
printf("%d\n", sizeof(*p));得1
printf("%d\n", sizeof(p[0]));得1
printf("%d\n", sizeof(&p));得4或8
printf("%d\n", sizeof(&p+1));得4或8
printf("%d\n", sizeof(&p[0]+1));得4或8
printf("%d\n", strlen(p));得6
printf("%d\n", strlen(p+1));得5
printf("%d\n", strlen(*p));得error
printf("%d\n", strlen(p[0]));得error
printf("%d\n", strlen(&p));得随机值
printf("%d\n", strlen(&p+1));得随机值
printf("%d\n", strlen(&p[0]+1));得5
//二维数组
重点总结:
①一个二维数组arr[3][4],arr[0]表示第一行的地址,arr[1]表示第二行的地址,arr[2]表示第三行的地址
②sizeof('a'+1),会发生整型提升

int a[3][4] = {0};
printf("%d\n",sizeof(a));得48
printf("%d\n",sizeof(a[0][0]));得4
printf("%d\n",sizeof(a[0]));得16
printf("%d\n",sizeof(a[0]+1));得4或8
特别注意:本题中a[0]表示第一行第一个元素的地址,+1则为第一行第二个元素的地址
printf("%d\n",sizeof(*(a[0]+1)));得4
printf("%d\n",sizeof(a+1));得4或8
特别注意:本题中a表示该二维数组第一行的地址,+1则为该二维数组第二行的地址
printf("%d\n",sizeof(*(a+1)));得16
printf("%d\n",sizeof(&a[0]+1));得4或8
特别注意:本题中&a[0]表示该二维数组第一行的地址,+1为该二维数组第二行的地址
printf("%d\n",sizeof(*(&a[0]+1)));得16
printf("%d\n",sizeof(*a));得16
特别注意:本题中a表示第一行元素的地址,解引用后为二维数组的第一行
printf("%d\n",sizeof(a[3]));得16
特别注意:尽管a[3]属于越界访问,但是sizeof计算变量的类型所占内存空间的大小,sizeof根据类型分析,并不会访问第四行的内容
结语
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
边栏推荐
- Unity one click AssetBundle
- Getting started with minicom
- C#课程设计之员工信息管理系统
- Conversion between JSON and object
- STM32F103 SPI (pit Diary)
- How to establish rectangular coordinate system in space
- About the problem that the editor and the white screen of the login interface cannot be found after the location of unityhub is changed
- Generate video using clipout in viz engine
- Unity2019_ Lighting system
- Maxcompute string splitting function -split_ PART
猜你喜欢

方正锐利重磅升级到12.0版本,包装印前处理更加便捷、高效!

ArrayList

Install cross compiler arm none liunx gnueabihf

多旅行商问题——公式和求解过程概述

haproxy+keepalived集群搭建02

Unity2019_ Natural ambient light_ Sky box

Haproxy+kept cluster setup 02

Editor Extensions

C语言-入门-精华版-带你走进编程(一)
![[set theory] order relation (the relation between elements of partial order set | comparable | strictly less than | covering | Haas diagram)](/img/df/a034032e203e7935dafaf8a71cb6c8.jpg)
[set theory] order relation (the relation between elements of partial order set | comparable | strictly less than | covering | Haas diagram)
随机推荐
What is BFC?
图像处理8-CNN图像分类
Get to know unity2 for the first time
JS to implement publish and subscribe
Base64和Base64URL
E: Unable to locate package ROS melody desktop full
ArrayList
[USACO12MAR]Cows in a Skyscraper G(状态压缩dp)
Pycharm remote ssh pyenv error: pydev debugger: warning: trying to add breakpoint to file that does
Open the influence list of "National Meteorological Short Videos (Kwai, Tiktok) in November" in an interactive way“
Transplantation of tslib Library
Demonstration of plug-in use of ventuz basic series
Docker installs MySQL and successfully uses Navicat connection
【云原生】微服务之Feign的介绍与使用
Wpf: solve the problem that materialdesign:dialoghost cannot be closed
MXone Pro自适应2.0影视模板西瓜视频主题苹果cmsV10模板
Lua framwrok framework starts
go 解析身份证
JSON与Object之间转换
An intern's journey to cnosdb