1.sizeof()  整形数组

#include<stdio.h>
int main()
{//整形数组int a[] = { 1,2,3,4 };    //注意:数组名在 1.sizeof(数组名) 2.&数组名 这两种情况时表示整个数组printf("%d\n", sizeof(a));   //sizeof(数组名) 这里为整个数组 一共4个元素 每个类型为int  4*4=16printf("%d\n", sizeof(a+0));//不是特殊情况 表示首元素地址 是地址(指针)   就是4/8printf("%d\n", sizeof(*a));//对首元素地址解引用得到的还是首元素 一个int大小 4printf("%d\n", sizeof(a+1));//首地址+1 变成第二个元素的地址  指针是存放地址的 所以是地址大小就为 4/8 printf("%d\n", sizeof(a[1]));//a[1]实际上是 *(a+1) 对第二个地址解引用 得到第二个元素为 int 4printf("%d\n", sizeof(&a));//&a 表示拿到整个数组的地址 但实际还是个(地址)指针 大小为4/8(x64)printf("%d\n", sizeof(*&a));//&a 拿到整个数组的地址 再解引用得到整个数组 为 4*int  16printf("%d\n", sizeof(&a+1));//先&a得到整个元素的地址 再+1 跳过一个数组的大小 得到其地址 4/8printf("%d\n", sizeof(&a[0]));//&a[0]等价于 &*(a+0) 实际上第一个元素的地址 4/8printf("%d\n", sizeof(&a[0]+1));//同理 先得到第一个元素的地止再+1 为第二个元素地址 4/8return 0;
}

2.sizeof()  字符数组

#include<stdio.h>
int main()
{//字符数组char arr[] = { 'a','b','c','d','e','f' };printf("%d\n", sizeof(arr));  //整个数组 6*char  6printf("%d\n", sizeof(arr+0));//首元素地址 4/8printf("%d\n", sizeof(*arr)); //首元素  1printf("%d\n", sizeof(arr[1]));// *(arr+1) 1printf("%d\n", sizeof(&arr));  //整个数组地址 4/8printf("%d\n", sizeof(&arr+1)); //跳过整个元素指向后面的地址 4/8printf("%d\n", sizeof(&arr[0]+1));//跳过首元素 第二个元素地址 4/8return 0;
}

3.streng()  字符数组

#include<stdio.h>
#include<string.h>
int main()
{//字符数组char arr[] = { 'a','b','c','d','e','f' };printf("%d\n", strlen(arr));  //首元素地址给出 往后找\0 可是没有 随机值printf("%d\n", strlen(arr+0));//同上 随机值//printf("%d\n", strlen(*arr)); //解引用 首地址拿到 a的阿斯克码值 97 strlen当做地址访问 err//printf("%d\n", strlen(arr[1]));// *(arr+1) 拿到b的阿斯克码值98  当地址访问 errprintf("%d\n", strlen(&arr));  //整个数组地址 传到strlen中强转成char*   随机值printf("%d\n", strlen(&arr+1)); //跳过整个元素指向后面的地址 随机值-6printf("%d\n", strlen(&arr[0]+1));//跳过首元素 第二个元素的地址 随机值-1return 0;
}

4.sizeof()  字符串

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = "abcdef";  //arr里放的其实是 a b c d e f \0printf("%d\n", sizeof(arr));  //整个数组 7*char  7printf("%d\n", sizeof(arr+0));//首元素地址  4/8printf("%d\n", sizeof(*arr)); //解引用 首地址 1printf("%d\n", sizeof(arr[1]));// *(arr+1) 第二个元素 1printf("%d\n", sizeof(&arr));  //4/8printf("%d\n", sizeof(&arr+1)); //跳过整个数组指向后面的地址 4/8printf("%d\n", sizeof(&arr[0]+1));//跳过首元素 第二个元素的地址 4/8return 0;
}

5.strlen()  字符串

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = "abcdef";  //arr里放的其实是 a b c d e f \0printf("%d\n", strlen(arr));  //首元素地址  6printf("%d\n", strlen(arr+0));//首元素地址  6//printf("%d\n", strlen(*arr)); //解引用 首地址 a-97 err //printf("%d\n", strlen(arr[1]));// *(arr+1) 第二个元素 b-98 errprintf("%d\n", strlen(&arr));  //整个数组地址 相对于strlen相当于首元素地址 6printf("%d\n", strlen(&arr+1)); //跳过整个数组指向后面的地址 后面无\0  随机值printf("%d\n", strlen(&arr[0]+1));//跳过首元素 第二个元素的地址 5return 0;
}

6.sizeof() *p 字符串

#include<stdio.h>
#include<string.h>
int main()
{char *p = "abcdef";  // p 存放的是a的地址printf("%d\n", sizeof(p));  //首元素地址  4/8printf("%d\n", sizeof(p+1));//首元素地址+1 第二个元素b地址 4/8printf("%d\n", sizeof(*p)); //解引用 首地址 得到第一个元素 1 printf("%d\n", sizeof(p[0]));// *(arr+0) 首元素  1printf("%d\n", sizeof(&p));  //指针变量p的地址(二级指针) 4/8printf("%d\n", sizeof(&p+1)); //指针变量p地址之后的地址 4/8printf("%d\n", sizeof(&p[0]+1));// &*(p+0)+1 跳过首元素地址 第二个元素的地址 4/8return 0;
}

6.strlen() *p 字符串

int main()
{char *p = "abcdef";  // p 存放的是a的地址printf("%d\n", strlen(p));  //首元素地址  6printf("%d\n", strlen(p+1));//首元素地址+1 第二个元素b地址 5//printf("%d\n", strlen(*p)); //解引用 首地址 得到第一个元素 err //printf("%d\n", strlen(p[0]));// *(arr+0) 首元素  errprintf("%d\n", strlen(&p));  //指针变量p的地址(二级指针) \0 未知 随机值  printf("%d\n", strlen(&p+1)); //指针变量p地址之后的地址 随机值printf("%d\n", strlen(&p[0]+1));// &*(p+0)+1 跳过首元素地址 第二个元素的地址 5return 0;
}

7.二维数组

int main()
{int a[3][4] = { 0 };     //二维数组可以看成 3个一维数组 每个数组4个元素printf("%d\n", sizeof(a));   //sizeof(数组名)为整个数组 12*4=48printf("%d\n", sizeof(a[0][0]));//首元素 4printf("%d\n", sizeof(a[0]));  //二维数组可以看做一维数组  a[0]可看做第一行数组名 单独放在sizeof内 计算第一行元素大小 16printf("%d\n", sizeof(a[0]+1)); //数组名不是单独放的 第一行首元素地址+1 为第二个元素地址 4/8printf("%d\n", sizeof(*(a[0]+1)));//第一行第二个元素地址 解引用 4printf("%d\n", sizeof(a+1));      //不是单独放 a为第一行的地址 +1 第二行的地址 4/8printf("%d\n", sizeof(*(a+1)));   //对第二行的地址解引用  16printf("%d\n", sizeof(&a[0]+1));  //&数组名 为整个第一行数组地址 +1 第二行数组地址 4/8printf("%d\n", sizeof(*(&a[0]+1)));//第二行元素 16printf("%d\n", sizeof(*a));     //a不是单独放 为第一行地址 解引用 16printf("%d\n", sizeof(a[3]));   // sizeof根据类型算出 不会真正去访问 第四行和前几行一样 int [4]  16return 0;
}

总结:

数组名通常情况下是首地址。 二维数组的首地址是第一行的地址。

但有两个例外。1.sizeof(数组名)  2.&数组名 是表示整个数组的。

sizeof是操作符 用来计算其所占内存空间的大小 不会真实访问内存 只要知道类型就可以。

strlen是函数  用来计算字符串长度的函数 只能针对字符串 他会从你给的地址向后访问找\0 找到才停止。

入门后指针进阶习题深度分析相关推荐

  1. C语言从指针入门到指针进阶

    目录 一.​​​​​​​了解指针 二.二级指针 三.字符指针 四.野指针 1.未初始化 2.指针越界访问 3.动态内存释放 4.规避野指针 五.指针数组 六.数组指针 七.函数指针 八.函数指针数组 ...

  2. 留言获赠书 | 朱春雷:Rust编程:入门 实战与进阶

    祝微信公众号 乐生活与爱IT 的读者朋友们,五一劳动节,吃好喝好睡好玩好,节日快乐! 今天给读者朋友们一个福利,请您在文章后面留言,留言比较精彩的,且获赞数比较多的朋友(至少3位),将有机会获得一本, ...

  3. 第十七章 指针进阶(1)

    C语言学习之路 第一章 初识C语言 第二章 变量 第三章 常量 第四章 字符串与转义字符 第五章 数组 第六章 操作符 第七章 指针 第八章 结构体 第九章 控制语句之条件语句 第十章 控制语句之循环 ...

  4. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  5. Memcached深度分析【zz】

    Memcached深度分析 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东西,相信 ...

  6. 查看队列深度_不为人知的网络编程(十一):从底层入手,深度分析TCP连接耗时的秘密...

    " 本文作者张彦飞,原题"聊聊TCP连接耗时的那些事儿",本次收录已征得作者同意,转载请联系作者.即时通讯网收录时有少许改动.本文已同步发布于52im社区:http:// ...

  7. NLP入门之综述阅读-基于深度学习的自然语言处理研究综述

    NLP入门-综述阅读-[基于深度学习的自然语言处理研究综述] 基于深度学习的自然语言处理研究综述 摘要 0 引言 1 深度学习概述 卷积神经网络 递归神经网络 2 NLP应用研究进展 3 预训练语言模 ...

  8. Mac 终端的入门指南与进阶技巧

    前言 hihi,勇敢的小伙伴儿们大家好啊,今天我想分享的是 Mac 终端的一些用法,说起分享的原因呢,也是在生活中受到了前辈的指导,那分享的目的呢,就是想在分享的同时和大家一起学习并逐渐掌握这个技能, ...

  9. 【鸿蒙OS开发入门】06 - 启动流程代码分析之KernelOS:之启动Linux-4.19 Kernel内核 启动init进程

    [鸿蒙OS开发入门]06 - 启动流程代码分析之KernelOS:之启动Linux-4.19 Kernel内核 一.head.S 启动start_kernel() 1.1 start_kernel() ...

最新文章

  1. 0基础学习数据分析必须掌握的技能有哪些?
  2. js基础面试高频面点1:变量提升
  3. 【存储过程】从数据库中读取数据保存到文件中
  4. Computing--图灵机
  5. vivo分屏_如果你用的是vivo手机,这4个功能别忽略,不然几千块就白花了
  6. k8s通过label来控制pod的位置
  7. Xshell替代品 -- FinalShell
  8. numpy基础知识点
  9. 谷歌和GitHub 联手提出新方法,提振软件供应链安全
  10. express学习 - (3)express 路由
  11. python分布式开发容易吗_Python能实现分布式的进程吗?
  12. 自制导纳信号发生器 [原创cnblogs.com/helesheng]
  13. 匹配滤波器结合Matlab实现
  14. CS61c Fall 2019 project1
  15. 计算机学院运动会加油,学校运会加油稿
  16. 嗅觉AI:为减少食物浪费出点力
  17. oracle证书怎么查成绩,Oracle认证考试成绩查询
  18. [DAX] FORMAT函数
  19. 水管工游戏(随机地图版)
  20. 级联引用完整性约束ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }

热门文章

  1. 计算机常用的加密方法,加密方式有哪些_教你常用加密方式有哪些
  2. 完整英文版资产负债表、利润表及现金流量表
  3. java计算器源代码_【原创源码】【Java】飞扬计算器源代码
  4. BDA下载Landsat
  5. IPTV解决方案之医院IPTV智慧电视系统
  6. 基于stm32f407cube ai实例
  7. 医院计算机中心应急演练,医院信息网络故障应急演练脚本
  8. CODE[VS]2996 Comrade 同志
  9. 三分钟教你怎么把EPUB转MOBI
  10. 安全生产预警管理系统