关于指针+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. 如果是整形,就直接相加即可
相关文章
|
6月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
7月前
入门后指针进阶习题深度分析
入门后指针进阶习题深度分析
43 1
|
6月前
|
C++
指针习题练习
指针习题练习
27 0
|
7月前
|
人工智能 C++
指针习题笔记(较难,可用于思维锻炼)
指针习题笔记(较难,可用于思维锻炼)
38 4
|
编译器 C语言 C++
带你刷笔试关的小怪|详解指针习题和面试题【C语言/指针/进阶】
带你刷笔试关的小怪|详解指针习题和面试题【C语言/指针/进阶】
107 0
|
存储 C语言 C++
C语言进阶第四篇【指针习题详解】(下)
C语言进阶第四篇【指针习题详解】(下)
135 0
C语言进阶第四篇【指针习题详解】(下)
|
存储 编译器 vr&ar
C语言进阶第四篇【指针习题详解】(上)
C语言进阶第四篇【指针习题详解】(上)
108 0
C语言进阶第四篇【指针习题详解】(上)
|
人工智能 算法 程序员
蓝桥杯第十一讲--双指针【例/习题】
蓝桥杯第十一讲--双指针【例/习题】
160 0
蓝桥杯第十一讲--双指针【例/习题】
|
1月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
128 13