关于指针+1的奇葩习题

简介: 关于指针+1的奇葩习题
 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct test
{
  int m;
  char* s;
  short p;
  char a[2];
    short q[4];
}*p;
int main()
{
  p = (struct test*)0x100000;
  printf("%p\n", p + 0x1);
//0x00 10 00 14 ->14等于十进制的20 即p原类型是一个结构体类型其大小为20byte所以当+1就会直接加20
  printf("%p\n", (unsigned long)p + 0x1);
//此处将p强转成了无符号的长整形既然是整形就直接+1即可
  printf("%p\n", (unsigned int *)p + 0x1);
//此处转化成了无符号int * 所以其大小又变成了4所以+1就是+4
  return 0;
}

image.png

所以对于指针的加1问题,总结来说有:

  1. 清楚其类型
  2. +1都是按照类型来加的,其是类型,就加上该类型的大小
  3. 如果是整形,就直接相加即可
相关文章
|
4月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
4月前
|
C++
指针习题练习
指针习题练习
19 0
|
5月前
入门后指针进阶习题深度分析
入门后指针进阶习题深度分析
38 1
|
5月前
|
人工智能 C++
指针习题笔记(较难,可用于思维锻炼)
指针习题笔记(较难,可用于思维锻炼)
32 4
|
编译器 C语言 C++
带你刷笔试关的小怪|详解指针习题和面试题【C语言/指针/进阶】
带你刷笔试关的小怪|详解指针习题和面试题【C语言/指针/进阶】
84 0
|
存储 C语言 C++
C语言进阶第四篇【指针习题详解】(下)
C语言进阶第四篇【指针习题详解】(下)
124 0
C语言进阶第四篇【指针习题详解】(下)
|
存储 编译器 vr&ar
C语言进阶第四篇【指针习题详解】(上)
C语言进阶第四篇【指针习题详解】(上)
100 0
C语言进阶第四篇【指针习题详解】(上)
|
人工智能 算法 程序员
蓝桥杯第十一讲--双指针【例/习题】
蓝桥杯第十一讲--双指针【例/习题】
148 0
蓝桥杯第十一讲--双指针【例/习题】
|
13天前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
15 0