当前位置:网站首页>c语言进阶篇:指针(五)
c语言进阶篇:指针(五)
2022-07-30 21:21:00 【摸鱼王胖嘟嘟】
前言
大家好~我又来了,今天给大家带来的是指针的几道笔试题,希望能够加强大家对指针知识的把握,指针就应该这样学!🤭
笔试题一
#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;
}
1.&a取出的是整个数组的地址,&a+1是跳过一个类型为int(* )[5]的数组。
2.a不是单独放在sizeof内,并且数组名a前面没有取地址符号,此时a表示首元素的地址。a+1时跳过一个类型为int的整型,即为第二位元素地址。
3.ptr-1是跳过一个类型为int的整型。
4.( * )(a+1)–>a[1];*(ptr-1)–>ptr[-1]。


笔试题二
#include<stdio.h>
//结构体大小是20个字节
struct Test
{
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
//x86环境下
int main()
{
printf("%p\n", p + 0x1);
//0x100000+20-->0x100014
//p+1表示跳过一个结构体,一个结构体的大小为20个字节
printf("%p\n", (unsigned long) p + 0x1);
//0x100000+1-->0x100001
//将p强制转换成一个整型之后加1
printf("%p\n", (unsigned int*) p + 0x1);
//0x100000+4-->0x100004
//p+1表示跳过一个类型为unsigned int的整型,即四个字节
return 0;
}


笔试题三
#include<stdio.h>
int main()
{
int a[4] = {
1 , 2 , 3 , 4 };
int* ptr1 = (int*) (&a + 1);
int* ptr2 = (int*) ((int) a + 1);
printf("%x, %x", ptr1[-1], *ptr2);
return 0;
}
1.ptr[-1]相当于 * (ptr-1)
2.&a取出的是整个数组的地址,&a+1是跳过一个类型为int(*)[4]的数组。
3.a不是单独放在sizeof内,并且数组名a前面没有取地址符号,此时a表示首元素的地址。a进行了强制类型转化成int,a+1进行整型之间相加,再进行强制转化成指针,跳过了一个字节,一个int类型大小为4个字节,而数据进行的是小端存储,故由指向01的指针,指向了00。而prt2的访问权限是访问4个字节,故ptr2访问的是0x02000000。

笔试题四
#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 ;
}
因为int a[3][2] = {(0,1),(2,3),(4,5)}是逗号表达式。
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
故int a[3][2] ={1,3,5};
a[0]是第一行的数组名,a[0]表示首元素的地址,即a[0][0]的地址,&a[0][0].

笔试题五
#include<stdio.h>
int main()
{
int a[5][5];
int(*p)[4];
p = a;
printf("%p,%d\n ", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
return 0;
}
1.p[4][2]相当于*(*(p+4)+2)。
2.两指针相减,得到的是两个指针之间的元素个数。
3.%p直接打印的是补码,地址被认为是无符号整型。


笔试题六
#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;
}
1.* (aa+1)相当于aa[1],表示第二行的数组名。
2.&aa取出的是整个数组的地址,&aa+1是跳过一个类型为int(*)[2][5]的数组。
3.aa不是单独放在sizeof内,并且数组名aa前面没有取地址符号,此时aa表示第一行的数组名,aa+1表示第二行的数组名。

笔试题七
#include<stdio.h>
int main()
{
char* a[] = {
"work" , "at" , "alibaba" };
char** pa = a;
pa++;
printf("%s\n", *pa);
return 0;
}
pa++是跳过一个类型为char*的指针。

笔试题八
#include<stdio.h>
int main()
{
char* c[] = {
"ENTER" , "NEW" , "POINT" , "FIRST" };
char** cp[] = {
c + 3 , c + 2 , c + 1 , c };
char*** cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp + 3);
printf("%s\n", *cpp[-2] + 3);
printf("%s\n", cpp[-1][-1] + 1);
return 0;
}
1.*cpp[-2]相当于 * ( * (cpp-2))。
2.cpp[-1][-1]相当于 * ( * (cpp-1)-1)

边栏推荐
- socket: Kernel initialization and detailed process of creating streams (files)
- 数据质量提升
- 触摸屏状态机
- The structure of knowledge in the corners of the C language
- Motion Tuned Spatio-temporal Quality Assessmentof Natural Videos
- Quick Master QML Chapter 6 Animation
- 牛客网——业务分析-提取值
- 系统结构考点之并行主存
- [Nuxt 3] (十三) Nuxt 是如何工作的?
- Why do so many people who teach themselves software testing give up later...
猜你喜欢

ClickHouse 数据插入、更新与删除操作 SQL

外包干了三年,废了...

What is the common factor

Outsourcing worked for three years, it was abolished...

【深度学习】对迁移学习中域适应的理解和3种技术的介绍

QUALITY-GATED CONVOLUTIONAL LSTM FOR ENHANCING COMPRESSED VIDEO

Teach you how to build a permanently running personal server

Typescript 严格模式有多严格?

基于ABP实现DDD--仓储实践

GPGGA NTRIP RTCM Notes
随机推荐
数据质量提升
LeetCode·Daily Question·952. Calculate Maximum Component Size by Common Factor·Union Check
Motion Tuned Spatio-temporal Quality Assessmentof Natural Videos
mpls简介
ClickHouse 创建数据库建表视图字典 SQL
LeetCode · 23. Merge K ascending linked lists · recursion · iteration
GPGGA NTRIP RTCM Notes
[Nuxt 3] (十四) Nuxt 生命周期
Niu Ke Xiaobaiyue Race 53 A-E
对List集合中每个对象元素按时间顺序排序
Typescript 严格模式有多严格?
GPGGA NTRIP RTCM 笔记
拿什么来保护数据安全?基层数据安全体系建设待提升
【深度学习】目标检测|SSD原理与实现
Google Earth Engine ——快速实现MODIS影像NDVI动画的在线加载并导出
新书上市 |《谁在掷骰子?》在“不确定性时代”中确定前行
Knowledge of C language corners of byte alignment
ValueError: Append mode is not supported with xlsxwriter解决方案
LeetCode·每日一题·952.按公因数计算最大组件大小·并查集
系统结构考点之并行计算霍纳法则
