首页 > 其他分享 >《初学C语言第30天》

《初学C语言第30天》

时间:2023-12-17 18:03:38浏览次数:28  
标签:arr 字节 30 C语言 初学 数组 printf sizeof strlen

////////————————9.指针和数组笔试题解析

////一维数组,数组名的理解,指针的运算与指针类型的意义

//#include<stdio.h>

//int main()

//{//元素的大小:元素所占内存空间的大小

// int a[] = { 1,2,3,4 };//由初始化内容可知数组元素个数为4字节

// printf("%d\n", sizeof(a));//sizeof(数组名)数组名表示整个数组元素的大小,单位是字节4*4=16字节

// //a不是单独放在sizeof内部,也没有取到地址,所以a就是首元素地址,a+0还是首元素地址,是地址,大小就是4/8个字节

// printf("%d\n", sizeof(a + 0));//a+0:首元素的地址//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(*a));//*a:首元素的地址//4字节

// printf("%d\n", sizeof(a + 1));//a:首元素的地址,a+1:第2个元素的大小//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(a[1]));//a[1]='2'的地址(第2个元素的大小)//4字节(32位平台)

// printf("%d\n", sizeof(&a));//&a得到的是整个数组的地址//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(*&a));//*&a相当于数组名a,计算的是数组的大小//4*4=16字节

// //&a得到的是整个数组的地址,类型为int(*)[4],指针类型决定了我对其进行*操作时有多大权限(访问几个字节),

// // 因为是一个指向整型数组的指针(数组指针),所以*一个指针访问的是一个数组

// printf("%d\n", sizeof(&a + 1));//&a得到的是整个数组的地址,+1,跳过整个数组的大小

// //,&a+1还是地址,大小就是4或8//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(&a[0]));//第1个元素的地址大小//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(&a[0] + 1));//第2个元素的地址大小//4字节(32位平台)或8字节(64位平台)

//}

//相等关系(依据上题内容)

// int类型的数组中,sizeof求数组的地址,结果是4字节(32位平台)或8字节(64位平台)

// a==&a[0],a+0==&a[0]+0,*a==*&a[0],*a==a[0],*&a==a,&a[0] + 1=&a[1],&和*可以抵消

//  

//  

////字符数组

//#include<stdio.h>

//#include<string.h>

//int main()

//{

// char arr[] = { 'a','b','c','d','e','f' };//6个元素

// printf("%d\n", sizeof(arr));//sizeof(数组名)数组名表示整个数组元素的大小,单位是字节1*6=6字节

// printf("%d\n", sizeof(arr + 0));//首元素地址+0=首元素地址,地址的大小//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(*arr));//数组首元素大小//1字节

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

// printf("%d\n", sizeof(&arr));//数组地址的大小//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(&arr + 1));//数组地址的大小(+1跳过一整个数组)//4字节(32位平台)或8字节(64位平台)

// printf("%d\n", sizeof(&arr[0] + 1)); //第2个元素的地址的大小//4字节(32位平台)或8字节(64位平台)

// //(1为整型,arr[0]发生整型提升,计算的是int的大小,结果为4/8)

// return 0;

//}

//#include<stdio.h>

//#include<string.h>

//int main()//strlen的参数是const char*,任何类型传给strlen都要变成const char*类型

//{//数组名没有sizeof和&时,表示首元素地址

// char arr[] = { 'a','b','c','d','e','f' };

// printf("%d\n", strlen(arr));//arr首元素地址//strlen计算长度时,直至遇到'\0'时,才会停止,所以结果为随机值>=6

// printf("%d\n", strlen(arr + 0)); //arr+0=arr首元素地址//strlen计算长度时,直至遇到'\0'时,才会停止(而),所以结果为随机值>=6

// //printf("%d\n", strlen(*arr));//此代码有问题,strlen(*arr)相当于strlen('a')而ASCII值为97,

// //即strlen(97)把97作为地址传给strlen,所以97被视为野指针,因为97并不是我们的地址,

// //printf("%d\n", strlen(arr[1]));//此代码有问题//此代码传的是b,同理为野指针

// //printf("%d\n", strlen(&arr));//&arr取出整个数组的地址,strlen计算长度时,直至遇到'\0'时,才会停止//随机值

// //printf("%d\n", strlen(&arr + 1));//&arr + 1跳过一整个数组为6个字符所以结果-6//随机值-6

// printf("%d\n", strlen(&arr[0] + 1));//arr[0]是第一个元素,+1为第二个元素。 + 1跳过了第一个元素所以结果-1//随机值-1

//}

//  

//#include<stdio.h>

//int main()

//{

// char arr[] = "abcdef";

// printf("%d\n", sizeof(arr));

// printf("%d\n", sizeof(arr + 0));

// printf("%d\n", sizeof(*arr));

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

// printf("%d\n", sizeof(&arr));

// printf("%d\n", sizeof(&arr + 1));

// printf("%d\n", sizeof(&arr[0] + 1));

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

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

// printf("%d\n", strlen(*arr));

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

// printf("%d\n", strlen(&arr));

// printf("%d\n", strlen(&arr + 1));

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

//

// return 0;

//}

//  

//#include<stdio.h>

//int main()

//{

// char* p = "abcdef";

// printf("%d\n", sizeof(p));

// printf("%d\n", sizeof(p + 1));

// printf("%d\n", sizeof(*p));

// printf("%d\n", sizeof(p[0]));

// printf("%d\n", sizeof(&p));

// printf("%d\n", sizeof(&p + 1));

// printf("%d\n", sizeof(&p[0] + 1));

// printf("%d\n", strlen(p));

// printf("%d\n", strlen(p + 1));

// printf("%d\n", strlen(*p));

// printf("%d\n", strlen(p[0]));

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

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

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

// return 0;

//}

//  

////二维数组

//#include<stdio.h>

//int main()

//{

// int a[3][4] = { 0 };

// printf("%d\n", sizeof(a));

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

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

// printf("%d\n", sizeof(a[0] + 1));

// printf("%d\n", sizeof(*(a[0] + 1)));

// printf("%d\n", sizeof(a + 1));

// printf("%d\n", sizeof(*(a + 1)));

// printf("%d\n", sizeof(&a[0] + 1));

// printf("%d\n", sizeof(*(&a[0] + 1)));

// printf("%d\n", sizeof(*a));

// printf("%d\n", sizeof(a[3]));

// return 0;

//}

//  

////总结:

////数组名的意义:

////1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。

////2. & 数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

////3. 除此之外所有的数组名都表示首元素的地址。

标签:arr,字节,30,C语言,初学,数组,printf,sizeof,strlen
From: https://blog.51cto.com/KKhahaha/8862490

相关文章

  • 实验6 C语言结构体、枚举应用编程
    实验任务1源代码:1#include<stdio.h>2#include<string.h>3#defineN10//运行程序输入测试时,可以把这个数组改小一些输入测试45typedefstructstudent{6intid;//学号7charname[20];//姓名8......
  • 【C语言总集篇】指针篇——从不会到会的过程
    指针导言大家好,很高兴又和大家见面了!!!今天我们终于开始了指针内容的学习了。在开始介绍指针之前我们先回顾一下前面的知识点。在前面的学习中,我们了解了内存以及地址的相关知识点:计算机硬件中的存储器分为主存储器和辅助存储器,主存储器就是我们所说的内存;在主存储器中,主存储器被划......
  • 个人报告20211303
    个人报告(20211303李天赐):a)列出自己的贡献:小组整体工作的推进和程序设计思路的确立,完成了前期代码结构搭建和初步撰写。b)列出设计中遇到的问题及解决方法(1)思路问题:--问题描述:在我们最开始设计程序的时候,先打算拿TLS协议中的三次握手协议的过程来练手,通过显示handshake这个信息......
  • 10.30
    今日学习内容<%--CreatedbyIntelliJIDEA.TochangethistemplateuseFile|Settings|FileTemplates.--%><%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</ti......
  • PTA|C语言|递归
    --------------------------------------------------------------------------------判断满足条件的三位数本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。函数接口定义:intsearch(intn);其中传入的参数intn是一个三位数的正整数(......
  • C语言 层次遍历二叉树
    代码如下#include<stdio.h>#include<stdlib.h>#defineMax_Size50typedefstructbitree{chardata;intlevel;structbitree*lchild;structbitree*rchild;}BiTreeNode,*BiTree;typedefstructqueue{BiTreeData[Max_Size];......
  • C语言 哲学家进餐问题
     #include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<time.h>#include<unistd.h>#include<pthread.h>#include<semaphore.h>#defineNsem_tchopsticks[N];//设置5种信号量,有5种不同类型的资源,每一种有1个,这样便于理解,......
  • 《初学C语言第29天》
    //////————————8.回调函数////回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个////函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数////的实现方直接调用,而是在特定的事件或条件发生时由另......
  • 汉源高科30路32路电话光端机 PCM语音电话光纤收发器 光电转换器
    32路电话光端机HY-32P是汉源高科(北京)科技有限公司采用自主知识产权的大规模集成电路,应用时分复用技术,将以太网信号和电话信号混合编码后在一对光纤上传输。实现热线电话业务传输,传输通道为光传输通道。该机采用1U机架式设计,集成度高,体积小,功耗低,工作可靠,安装使用方便。主要功能与特......
  • (学期2023-2024.1;学号:20232300)《⽹络空间安全导论》第6周学习总结
    第6章应用安全基础应用安全是为保障各种应用系统在信息的获取、存储、传输和处理各个环节的安全所涉及的相关技术的总称。密码技术是应用安全的核心支撑技术,系统安全技术与网络安全技术则是应用安全技术的基础和关键技术。应用安全涉及如何防止身份或资源的假冒、未经授权的访......