当前位置: 首页 > news >正文

初学c语言14(指针6)

一.sizeof和strlen的对比

1.sizeof

操作符,计算变量所占空间大小

2.strlen

库函数,函数原型为

求的是字符串的长度,统计的是“\0”之前的字符个数

二.指针和笔试题解析

补充:数组名的意义

1.sizeof(数组名)

这里表示整个数组,计算的是整个数组所占空间的大小

2.&数组名

这里表示整个数组,取出的是整个数组的地址

3.其他

表示首元素的地址

1.一维数组

代码:

#include <stdio.h>
int main()
{printf("%zu\n",sizeof(a));printf("%zu\n",sizeof(a+0));printf("%zu\n",sizeof(*a));printf("%zu\n",sizeof(a+1));printf("%zu\n",sizeof(a[1]));printf("%zu\n",sizeof(&a));printf("%zu\n",sizeof(*&a));printf("%zu\n",sizeof(&a+1));printf("%zu\n",sizeof(&a[0]));printf("%zu\n",sizeof(&a[0]+1));
}

解释:

2.字符指针

例 2.1:

代码:

#include <stdio.h>
int main()
{char arr[] = { 'a','b','c','d','e','f' };printf("%zu\n", sizeof(arr));printf("%zu\n", sizeof(arr + 0));printf("%zu\n", sizeof(*arr));printf("%zu\n", sizeof(arr[1]));printf("%zu\n", sizeof(&arr));printf("%zu\n", sizeof(&arr + 1));printf("%zu\n", sizeof(&arr[0] + 1));return 0;
}

解释:

例2.2

代码:

#include <stdio.h>
#include <string.h>
int main()
{char arr[] = { 'a','b','c','d','e','f' };printf("%zu\n", strlen(arr));printf("%zu\n", strlen(arr + 0));printf("%zu\n", strlen(*arr));printf("%zu\n", strlen(arr[1]));printf("%zu\n", strlen(&arr));printf("%zu\n", strlen(&arr + 1));printf("%zu\n", strlen(&arr[0] + 1));return 0;
}

解释:

例2.3

代码:

#include <stdio.h>
int main()
{char arr[] = "abcdef";printf("%zu\n", sizeof(arr));printf("%zu\n", sizeof(arr + 0));printf("%zu\n", sizeof(*arr));printf("%zu\n", sizeof(arr[1]));printf("%zu\n", sizeof(&arr));printf("%zu\n", sizeof(&arr + 1));printf("%zu\n", sizeof(&arr[0] + 1));return 0;
}

解释:

例2.4

代码:

#include <stdio.h>
#include <string.h>
int main()
{char arr[] = "abcdef";printf("%zu\n", strlen(arr));printf("%zu\n", strlen(arr + 0));printf("%zu\n", strlen(*arr));printf("%zu\n", strlen(arr[1]));printf("%zu\n", strlen(&arr));printf("%zu\n", strlen(&arr + 1));printf("%zu\n", strlen(&arr[0] + 1));return 0;
}

解释:

例2.5

代码:

#include <stdio.h>
int main()
{char* p = "abcdef";printf("%zu\n", sizeof(p));printf("%zu\n", sizeof(p + 1));printf("%zu\n", sizeof(*p));printf("%zu\n", sizeof(p[0]));printf("%zu\n", sizeof(&p));printf("%zu\n", sizeof(&p + 1));printf("%zu\n", sizeof(&p[0] + 1));return 0;
}

解释:

例2.6

代码:

#include <stdio.h>
#include <string.h>
int main()
{char* p = "abcdef";printf("%zu\n", strlen(p));printf("%zu\n", strlen(p + 1));printf("%zu\n", strlen(*p));printf("%zu\n", strlen(p[0]));printf("%zu\n", strlen(&p));printf("%zu\n", strlen(&p + 1));printf("%zu\n", strlen(&p[0] + 1));return 0;
}

解释:

3.二维数组

代码:

#include <stdio.h>
int main()
{int a[3][4] = { 0 };printf("%zu\n", sizeof(a));printf("%zu\n", sizeof(a[0][0]));printf("%zu\n", sizeof(a[0]));printf("%zu\n", sizeof(a[0] + 1));printf("%zu\n", sizeof(*(a[0] + 1)));printf("%zu\n", sizeof(a + 1));printf("%zu\n", sizeof(*(a + 1)));printf("%zu\n", sizeof(&a[0] + 1));printf("%zu\n", sizeof(*(&a[0] + 1)));printf("%zu\n", sizeof(*a));printf("%zu\n", sizeof(a[3]));return 0;
}

解释:

注意:sizeof计算变量、数组的大小是,是通过内存推导的,不会真实访问内存空间

三.练习

例1:

include <stdio.h>int main(){int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( "%d,%d", *(a + 1), *(ptr - 1));return 0;}

解释:

例2:

代码:

#include <stdio.h>int main(){int a[3][2] = { (0, 1), (2, 3), (4, 5) };int *p;p = a[0];printf( "%d", p[0]);return 0;}

解释:

例3:

#include <stdio.h>int main(){int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int *ptr1 = (int *)(&aa + 1);int *ptr2 = (int *)(*(aa + 1));printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));return 0;}

解释:

例4:

代码:

#include <stdio.h>int main(){char *a[] = {"work","at","alibaba"};char**pa = a;pa++;printf("%s\n", *pa);return 0;}

解释:

http://www.xdnf.cn/news/437815.html

相关文章:

  • 用模型预测控制算法实现对电机位置控制仿真
  • 深入浅出入侵检测系统(IDS)的工作原理与应用场景
  • TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能
  • Ubuntu24.04编译ORB_SLAM的一系列报错解决
  • 数字取证-内存取证(volatility)
  • 使用VSCode编辑Markdown+PlantUml
  • 前端面试宝典---js垃圾回收机制
  • “海外滴滴”Uber的Arm迁移实录:重构大规模基础设施​
  • 知识图谱重构电商搜索:下一代AI搜索引擎的底层逻辑
  • 广东省省考备考(第十天5.14)—言语(第三节课)
  • deepseek梳理java高级开发工程师算法面试题
  • C++23 中的 ranges::starts_with 与 ranges::ends_with
  • Go语言中的函数类型参数:深入理解`func()`
  • 编程日志5.6
  • 比亚迪固态电池突破:王传福的技术哲学与产业重构|创客匠人热点评述
  • 部署安装gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm
  • PyQt5基本窗口控件(QComboBox(下拉列表框))
  • AI开发者的算力革命:GpuGeek平台全景实战指南(大模型训练/推理/微调全解析)
  • 注解和 XML 两种方式有什么区别?
  • hudi + flinksql 处理 金额汇总的实时场景
  • Flink实时统计任务CPU异常排查与解决方案
  • Thrust库中的Gather和Scatter操作
  • 【​​HTTPS基础概念与原理​】​​HTTPS vs HTTP:为什么现代网站必须用HTTPS?
  • 元宇宙赛道新势力:成都芯谷产业园创新业务如何重构产业格局
  • 5.18-AI分析师
  • 【RabbitMq C++】消息队列组件
  • 人工智能外呼系统:重构智能交互的全维度进化
  • ORACLE查看归档是否打开
  • 海量数据Top k 与查重问题
  • JavaScript篇:揭秘函数式与命令式编程的思维碰撞