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

《初学C语言第32天》

时间:2023-12-19 19:06:34浏览次数:21  
标签:00 int 32 C语言 初学 整型 printf cpp cp

//////——————————————————10. 指针笔试题

//////笔试题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));//*(a+1):指的是数组a中第二个元素2

//    //(int*)(&a + 1),(int*)表示强制类型转换为(int*),(&a + 1)指的是整个数组的地址后面的那一位元素的地址,即5+1,*(ptr - 1)正好抵消+1,为5

//    return 0;

//}

////程序的结果是什么?

////2,5




////////笔试题2(整形+1与指针+1的区别)

//////由于还没学习结构体,这里告知结构体的大小是20个字节

////此代码在X86环境下才能运行,%p可以打印整形

////struct Test

////{

////    int Num;

////    char* pcName;

////    short sDate;

////    char cha[2];

////    short sBa[4];

////}*:此部分为结构体类型

//#include<stdio.h>

//struct Test                  

//{

//    int Num;

//    char* pcName;

//    short sDate;

//    char cha[2];

//    short sBa[4];

//}*p=(struct Test*)0x100000;//将0x100000赋值给p,并进行强制类型转换

////假设p 的值为0x100000。 如下表表达式的值分别为多少?

//int main()

//{

//    printf("%p\n", p + 0x1);//p为整个结构体,+1跳过整个结构体,即在十六进制的基础上+20。

//    //0x1=十六进制的1,即 p + 0x1=p+1//0x100014

//    printf("%p\n", (unsigned long)p + 0x1);//unsigned long:无符号长整型。

//    //为整数则p为1048576(0x100001的十进制),+1为1048577=0x100001

//    printf("%p\n", (unsigned int*)p + 0x1);//强制类型转换为unsigned int*,无符号整型指针,

//    //+1跳过一个无符号整型的大小,4个字节。0x100000+4//0x100004

//    return 0;

//}//结果为

////00100014

////00100001

////00100004




//////////笔试题3

//#include<stdio.h>

//int main()

//{

//    int a[4] = { 1, 2, 3, 4 };

//    int* p1 = (int*)(&a + 1);//(&a + 1)中a取出的是整个数组的地址,+1指向数组外面的位置,假设为‘5’

//    int* p2 = (int*)((int)a + 1);//((int)a + 1),首元素地址a先被强制类型转换为int,所以a不是首元素地址,而是整型值,+1就是数值+1

//    printf("%x,%x", p1[-1], *p2);//ptr1[-1]==*(ptr1+(-1))==*(ptr-1)

//    return 0;

//}//结果为4,200000

////如图所示

////a=01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00(小端存储模式,小放小,大放大)

////   低地址                                高地址

////a=0x12ff40

////a+1=0x12ff44//a为整个数组//差4个字节

//// ptr1:指向‘04 00 00 00’的最后一个‘00’的后面,-1指向‘04’,*后访问的是‘04 00 00 00’的值,则拿出来的值为‘00 00 00 04’

//// %x为十六进制打印(有效数字前面的0不打印),为‘4’

//// ptr2:

////(int)a+1=0x12ff41//a先被强制类型转换为整型//差1个字节,即‘01’的位置是0x12ff40,

//// +1后就指的是01后的00,地址为0x0012ff41,相差一个字节。

////(int*):地址强制类型转换为int*,从而把它当成指针分给ptr2,因此ptr2指向01后的00的位置,

//// 因为是整型占4个字节,所以ptr2的整型所指为‘02 00 00 00’由于是小端存储,所以值为2

////*ptr2:ptr2本身为一个整型指针,则从‘00’向后访问一个整型(四个字节),*整型指针访问一个整型,

//// 即访问的是‘02 00 00 00’%x为十六进制打印(有效数字前面的0不打印),为‘2 00 00 00’




//////////笔试题4

//#include <stdio.h>

//int main()

//{

//    int a[3][2] = { (0, 1), (2, 3), (4, 5) };

//    //此处有坑,正常二维数组初始化为int a[1][2]={{1,2}.{3,4}};图形为:1 2 3 4

//    int* p;//而此处是((0,1),(2,3),(4,5))考的是逗号表达式(从左向右以此计算),

//    //即整个表达式结果为最后一个表达式的结果,因此初始化为(1,3,5)

//    p = a[0];//a[0]=a[0][0]二维数组第一行第一个元素1

//    printf("%d", p[0]); //p[0]为第一行第一个元素:1//p[0]=*(p+0)=*p

//    return 0;

//}//结果为1




////////笔试题5

// #include<stdio.h>

//int main()

//{

//    int a[5][5];//二维数组的数组名a表示第一行的地址,类型为int(*)[5]

//    int(*p)[4];//p:数组指针,指向一个有四个整型元素的数组.类型:int(*)[4]

//    p = a;//第一行的地址赋给p,虽然a为5行5列,并且p指向a的开始端,p+4:p每次跳过4个整型

//    printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);//p[4][2]==*(*(p+4)+2)

//    return 0;

//}//结果为:fffffffc,-4

////-4的原码:10000000 00000000 00000000 00000100

////-4的反码:11111111 11111111 11111111 11111011(符号位不变,其余的按位取反)

////-4的补码:11111111 11111111 11111111 11111110(反码+1)

////4个二进制位=1个十六进制位-->fffffffc,c=12



////////笔试题6

// #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;

//}//结果为10,5,同理于笔试第三题




////////笔试题7

//#include <stdio.h>

//int main()

//{

//    char* a[] = { "work","at","alibaba" };

//    char** pa = a;//a为首元素地址work

//    pa++;//+1==a[1]==at

//    printf("%s\n", *pa);

//    return 0;

//}结果为at





////////笔试题8

// #include<stdio.h>

//int main()

//{

//    char* c[] = { "ENTER","NEW","POINT","FIRST" };//c数组的元素都是char*

//    char** cp[] = { c + 3,c + 2,c + 1,c };//cp数组的元素都是char**//c为首元素地址:ENTER,

//    //则c + 3=FIRST。c + 2=POINT。c + 1=NEW。c=ENTER

//    char*** cpp = cp;//cp为首元素地址:FIRST,cpp指向FIRST

//    printf("%s\n", **++cpp);//++cpp=cpp+1=cp+1=c+2,cpp+1指向POINT,打印POINT

//    printf("%s\n", *-- * ++cpp + 3);//++cpp=cpp+1=cp+2=c+1,--cpp==cpp=cp+3=c,

//    //*后拿到的是'ENTER'中‘E’的地址,+3为‘E’,打印为ER

//    printf("%s\n", *cpp[-2] + 3);//*cpp[-2]=*(*(p-2)),cpp指向cp[2],cpp-2指向cp[0],

//    //*后指向的是'FIRST',+3指向'FIRST'的's'打印为ST

//    printf("%s\n", cpp[-1][-1] + 1);//cpp[-1][-1]=*(*(cpp-1)-1),cpp指向cp[2],cpp-1指向cp[1],

//    //*后拿到的是c+2:POINT,-1后拿到的是c+1:NEW,+1后指向‘NEW’的‘E’打印为EW

//    return 0;

//}//结果为

////POINT

////ER

////ST

////EW

标签:00,int,32,C语言,初学,整型,printf,cpp,cp
From: https://blog.51cto.com/KKhahaha/8891887

相关文章

  • DDNS使用公云(3322)的兄弟们注意了
    9月份周六开始就出现陆续解析不了f3322.net的域名,但是新建的xf3322.net的则没问题,到周一官方发布公告才知道被限制了,所以如果华为、华三等设备上面动态公网IP关联了公云(3322)DDNS的朋友,删除之前的域名新注册x3322.net的就可以继续使用了。(按官方的意思目前f3322.net处于整顿状态,多久......
  • STM32驱动步进电机
    一、步进电机的介绍17HS4401步进电机是一种步进电机,也称为双级四相混合式步进电机。它是一种旋转电机,可以控制旋转角度和速度,17HS4401步进电机通常被应用于一些需要精准控制转动的场合,例如打印机、CNC机床等。参数:1.步距角度:1.8度2.驱动方式:双级四相混合式3.工作电压:12V4.......
  • [排序,贪心,置换环]洛谷P1327&&P8637,双倍经验
    前置知识:置换环,最小交换次数https://blog.csdn.net/yunxiaoqinghe/article/details/113153795?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%9C%80%E5%B0%91%E4%BB%BB%E6%84%8F%E4%BA%A4%E6%8D%A2%E6%8E%92%E5%BA%8F%E8%AF%81%E6%98%8E%E7%94%A8%E7%BD%AE%E6%8D......
  • C语言实现TCP CS模型代码,客户端服务器
    服务端将接受客户端发送的数据并将其转换成大写形式,然后再发送给客户端,客户端将发送一个字符串给服务器,并显示来自服务器的响应内容。服务器点击查看代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include<netinet/in.h>#......
  • 《安富莱嵌入式周报》第328期:自主微型机器人,火星探测器发射前失误故障分析,微软推出12
     更新一期视频教程:【实战技能】单步运行源码分析,一期视频整明白FreeRTOS内核源码框架和运行机制,RTOSTrace链表功能展示视频版:https://www.bilibili.com/video/BV1Rw411b7M1/ 1、自主无电池无线微型机器人https://millimobile.cs.washington.edu/millimobile-compressed.pdf(2.......
  • 【C语言】结束符’\0‘ & gets()字符串输入函数
    ......
  • 【C语言】结束符"\0" & gets()字符串输入函数
    ......
  • [ABC325G] offence
    题意给定一个长度为\(n\)字符串以及一个数\(f\),你可以执行以下操作任意次,求最终字符串长度的最小值。在字符串中选择一个连续的of,删掉它以及它后面的\(i\)个字符,\(0\lei\lef\)。数据范围:\(n\le300\)。思路看到数据范围以及字符串中间的删除可以想到区间dp。......
  • [ABC328F] Good Set Query 题解
    复习了一下边带权并查集板子。设\(d_{x}\)表示当前点到它所在连通块根节点的距离。合并点\(x\)和点\(y\)所在两个连通块时需要更新\(d\)。因为将\(x\)点所在连通块的根节点的父亲节点设为了\(y\)点所在连通块的根节点,所以有\(x\toy\toFind(y)=x\toFind(x)\to......
  • C0328 【1005 C组】模拟测试 斜率 题解
    原题链接:斜率。题意在一个平面直角坐标系中,给定\(n\)个点的横纵坐标,求出哪两个点所构成的连线的斜率最接近\(\frac{P}{Q}\)。数据范围:\(n\le1000000\)。思路显然这是一道数学题,不能直接暴力去找答案。首先我们可以弱化一下题目,求出斜率最接近\(y=0\)即\(x\)轴的两......