C指针练习

文章详细解释了C语言中整型、字符型、指针型和二维数组的sizeof运算,展示了不同数据类型的存储大小、地址计算以及sizeof表达式的值属性和类型属性的应用。
摘要由CSDN通过智能技术生成

1. 整型

int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));	   
//4*4=16

printf("%d\n", sizeof(a + 0)); 
//数组名是首元素地址,a+0还是首元素的地址,地址的大小 4/8

printf("%d\n", sizeof(*a));    
//数组名a是首元素的地址,*a是首元素,大小是4个字节

printf("%d\n", sizeof(a + 1)); 
//数组名a是数组首元素的地址,a+1是第二个元素的地址,地址大小是4/8

printf("%d\n", sizeof(a[1]));  
//第二个元素的大小就是4个字节

printf("%d\n", sizeof(&a));    
//&a是数组的地址,数组的地址也是地址,是地址4/8个字节

printf("%d\n", sizeof(*&a));   
//整个数组,16个字节

printf("%d\n", sizeof(&a + 1));
//&a+1相对于&a是跳过了整个数组,即使跳过了整个数组,&a+1依然是地址,地址是4/8个字节

printf("%d\n", sizeof(&a[0])); 
//首元素的地址,4/8个字节

printf("%d\n", sizeof(&a[0]+1));
//&a[0]是首元素的地址,&a[0]+1就是第二个元素的地址,是地址就是4/8个字节

2.字符型

char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));
//数组名单独放在sizeof内部,这里的arr是整个数组的大小,单位是字节,总共6个字节

printf("%d\n", sizeof(arr + 0)); 
//arr+0首元素地址,地址大小4/8个字节

printf("%d\n", sizeof(*arr));
//arr是首元素的地址,*arr就是首元素,大小1个字节

printf("%d\n", sizeof(arr[1]));
//arr[1]就是第二个元素,大小1个字节

printf("%d\n", sizeof(&arr));
//&arr数组的地址,是地址大小4/8个字节

printf("%d\n", sizeof(&arr+1));
//*arr+1是跳过整个数组后的地址,是地址就是4/8个字节

printf("%d\n", sizeof(&arr[0] + 1));
//第二个元素的地址,是地址就是4/8个字节
char arr[] = "abcdef";//[a b c d e f \0]
printf("%d\n", sizeof(arr));
// 7个字节
	
printf("%d\n", sizeof(arr + 0)); 
// 首元素地址 4/8字节

printf("%d\n", sizeof(*arr));
//首元素 1字节
//*arr == *(arr+0) == arr[0]

printf("%d\n", sizeof(arr[1]));
//第二个元素 1字节

printf("%d\n", sizeof(&arr));
//数组的地址,4/8个字节

printf("%d\n", sizeof(&arr+1));
//&arr+1跳过一个数组的地址,4/8个字节

printf("%d\n", sizeof(&arr[0] + 1));
//第二个元素的地址,4/8个字节
//strlen 是库函数
//求字符串长度,统计的是字符串 \0 之前的字符个数
//没有 \0 就会一直向后找

printf("%d\n", strlen(arr));
//随机值

printf("%d\n", strlen(arr + 0)); 
//随机值

printf("%d\n", strlen(*arr));  
// strlen传参需要的是一个地址,*arr是数组首元素,就是'a'= 97。则将97作为地址传参
//strlen 就会从97这个地址开始统计字符串长度,这就非法访问内存

printf("%d\n", strlen(arr[1]));  
//同上

printf("%d\n", strlen(&arr));  
//&arr是数组的地址,类型char(*)[6],与strlen 函数传参char *str
//数组的地址与数组首元素的地址值是一样的
//随机值

printf("%d\n", strlen(&arr + 1)); 
//跳过整个数组,随机值

printf("%d\n", strlen(&arr[0] + 1));
//从第二个元素向后统计,随机值
char arr[] = "abcdef";//[a b c d e f \0]
printf("%d\n", strlen(arr));
//6个字符
	
printf("%d\n", strlen(arr + 0));
//6个字符 

printf("%d\n", strlen(*arr));
//error,字符 a 

printf("%d\n", strlen(arr[1]));
//error

printf("%d\n", strlen(&arr));
//char(*)[6] 转化成 char* ,数值相同,6个字符

printf("%d\n", strlen(&arr+1));
//跳过\0,随机值

printf("%d\n", strlen(&arr[0] + 1));
//5个字符

3. 指针型 

char* p = "abcdef";//[a b c d e f \0], p存放 a 的地址
 
printf("%d\n", sizeof(p));
// p是指针变量,4/8个字节

printf("%d\n", sizeof(p + 1));
// p+1指向b,大小4/8个字节

printf("%d\n", sizeof(*p));
// 首元素,大小是1个字节

printf("%d\n", sizeof(p[0]));
// 首元素,大小是1个字节

printf("%d\n", sizeof(&p));
// &p -> char** 二级指针,大小是1个字节

printf("%d\n", sizeof(&p + 1));
//&p + 1 指向p的尾部 大小是4/8个字节

printf("%d\n", sizeof(&p[0] + 1));
// 指向b,大小4/8个字节

return 0;
char* p = "abcdef";//[a b c d e f \0], p存放 a 的地址
	 
printf("%d\n", strlen(p));
// 6个字符

printf("%d\n", strlen(p + 1));
// 5个字符

printf("%d\n", strlen(*p));
// error,*p -> a ,非法内存访问

printf("%d\n", strlen(p[0]));
// error,*p -> a ,非法内存访问 *(p+0)

printf("%d\n", strlen(&p));
// 随机值

printf("%d\n", strlen(&p + 1));
// 随机值

printf("%d\n", strlen(&p[0] + 1));
// 随机值

4. 二维数组

int a[3][4] = { 0 }; // 3行4列
printf("%d\n",sizeof(a));
// 3 * 4 * 4 = 48 字节

printf("%d\n",sizeof(a[0][0]));
// 4 字节

printf("%d\n", sizeof(a[0]));
// 对于二维数组 a 来说,a[0] 就是第一行这个一维数组的数组名
// a[1] 就是第二行这个一维数组的数组名 
// a[2] 就是第三行这个一维数组的数组名  
// 数组名单独放在sizeof内部,计算整个数组的大小 16 字节
	

printf("%d\n", sizeof(a[0] + 1));
// a[0]作为第一行的数组名,没有单独放在sizeof内部,没有 & 取地址
// a[0]表示数组首元素的地址,也就是a[0][0]的地址
// a[0] + 1 是第一行第二个元素的地址,地址4/8字节

printf("%d\n", sizeof(*(a[0] + 1)));
// 第一行第二个元素的大小


printf("%d\n", sizeof(a + 1));
// a是数组首元素的地址,是第一行的地址 int(*)[4]
// a+1就是第二行的地址,地址4/8字节

printf("%d\n", sizeof(*(a + 1)));
// *(a + 1) -> a[1],计算的是第二行的大小
// a + 1 ->是第二行的地址,int(*)[4],解应用访问的是第二行的数组

printf("%d\n", sizeof(&a[0] + 1));
// 第二行的地址,地址4/8字节

printf("%d\n", sizeof(*(&a[0]+1)));
// 计算的是第二行的大小 16字节

printf("%d\n", sizeof(*a));
// a是数组首元素的地址,就是第一行的地址
// *a就是第一行,16字节
// *a -> *(a+0) -> a[0]

printf("%d\n", sizeof(a[3]));
// a[3] -> int [4]
// sizeof 只关注类型
//16字节

return 0;

5. sizeof

//编译 + 链接 -> 可执行程序 -> 运行 -> 结果

//表达式:
// 1. 值属性
// 2. 类型属性

  • 26
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
1. 智慧监狱概述 智慧监狱的建设背景基于监狱信息化的发展历程,从最初的数字化监狱到信息化监狱,最终发展到智慧监狱。智慧监狱强调管理的精细化、监管的一体化、改造的科学化以及办公的无纸化。政策上,自2017年以来,司法部连续发布了多项指导性文件,推动智慧监狱的建设。 2. 内在需求与挑战 智慧监狱的内在需求包括数据应用与共享的不足、安防系统的单一功能、IT架构的复杂性、信息安全建设的薄弱以及IT运维的人工依赖。这些挑战要求监狱系统进行改革,以实现数据的深度利用和业务的智能化。 3. 技术架构与设计 智慧监狱的技术架构包括统一门户、信息安全、综合运维、安防集成平台和大数据平台。设计上,智慧监狱采用云计算、物联网、大数据和人工智能等技术,实现资源的动态分配、业务的快速部署和安全的主动防护。 4. 数据治理与应用 监狱数据应用现状面临数据分散和共享不足的问题。智慧监狱通过构建数据共享交换体系、数据治理工具及服务,以及基于数据仓库的数据分析模型,提升了数据的利用效率和决策支持能力。 5. 安全与运维 智慧监狱的信息安全建设涵盖了大数据应用、安全管理区、业务区等多个层面,确保了数据的安全和系统的稳定运行。同时,综合运维平台的建立,实现了IT系统的统一管理和自动化运维,提高了运维效率和系统的可靠性。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值