首页 > 其他分享 >C中指针之间的类型转换

C中指针之间的类型转换

时间:2023-09-22 23:22:41浏览次数:49  
标签:类型转换 变量 age father name 内存 student 之间 指针

也许一个不兼容的指针可以访问变量

#include <stdio.h>
#include <stdlib.h>

typedef struct father {
	int age;
	char* name;
} father;

typedef struct student {
	int age;
	double height;
	char sex;
} student;

int main() {
  // initiate two stuct variables
  student* s = (student*)malloc(sizeof(student));
  father*  f = (father*)malloc(sizeof(father));
  s->age = 22;
  s->height = 1.78;
  s->sex = 'm';
  f->age = 45;
  f->name = "Alan";
  
  // typecasting
  // f指向学生结构体变量,f会将这个变量看作father结构体变量并访问
  f = (student*)s;
  
  /*正常情况下,输出的是一个异常值,但要看具体的内存布局!!
	本例中,father和student变量都有一个成员age,而且都是第一个成员,
	因此,f访问student变量所在的内存区域,刚好可以成功访问f的age这个变量
  */
  printf("f->age = %d\n", f->age);
  // 正常情况下,输出的是一个异常值,但要看具体的内存布局!!
  printf("f->name = %d\n", f->name);
  
  return 0;
}

内存布局

标签:类型转换,变量,age,father,name,内存,student,之间,指针
From: https://www.cnblogs.com/gjsun/p/17721358.html

相关文章

  • 数据类型&类型转换
    注释单行注释//多行注释/**/文档注释/*****/ 标识符标识符大小写十分敏感数据类型基本数据类型数据类型整数类型byte:1个字节3short:2个字节5int:4个字节10long:8个字节19整数类型补充二进制0b开头八进制0开头十六进制0x开头......
  • 关于指针:
    1.voidp:p可以接受任意类型的地址。void类型的指针不能进行解引用操作。2.指针数组:intp[5];是一个数组,每个元素是int 数组指针:int(*p)[5]:是一个指针,指向一个5个元素类型是int的数组。函数指针:void(*p)(int,int):指向一个void类型参数是(int,int)的函数。3.voidadd(int......
  • c语言双指针法--原地删除数组中的元素
     27.移除元素-力扣(LeetCode) intremoveElement(int*nums,intnumsSize,intval){intleft=0;intright=0;while(right<numsSize){if(nums[right]!=val){nums[left]=nums[right];left++;}......
  • 快指针慢指针
    快指针和慢指针主要解决将某一目标值覆盖或抛到数组最后且不改变原数组剩下元素的顺序的问题快指针每次循环都会往后移动,慢指针只有快指针没有遇到目标值的时候才会往后移动,在慢指针移动之前还要对目标值进行覆盖或则交换操作。将目标值抛到最后https://leetcode.cn/problems/m......
  • 七天学会C语言-第六天(指针)
    1.指针变量与普通变量指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。普通变量是一种存储数据的容器,可以直接存储和访问数据的值。:intnum=10;//定义一个整数型普通变量num,赋值为10在例子中,变量num是一个普通整数变量,它直接存储了值10。指针变......
  • C++ 智能指针概述
    原始指针要想了解智能指针,就需要首先了解原始指针的痛点,原始指针有几点问题忘记释放内存->产生内存泄漏在尚有指针引用内存的情况下释放内存(使用已经释放掉的对象)->产生引用非法内存的指针同一块内存释放2次智能指针的产生本质上都是为了解决这些问题关于使用new动态分......
  • 初中数学 - 无理数,以及各种数之间的关系
    无理数无限不循环小数,比如:π,它的小数部分无限长,但是并不循环。但是:1/3是有理数,他的小数部分无限长,但是是循环的。 数之间的关系  参考 有理数无理数实数的区别(baidu.com) ......
  • 双指针法、滑动窗口法、螺旋矩阵
    1.双指针法解有序数组的平方1.1题目要求LeetCode977有序数组的平方题目内容:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序......
  • [算法学习笔记] 浅谈二路归并&双指针&归并排序
    二路归并·双指针是一种优化思想。它可以在\(O(n)\)的复杂度下把两个长度为\(n\)的有序数组合并为一个有序数组。它的具体处理方法如下:定义两个长度为\(n\)的升序数组\(a,b\)。,合并完后长度为\(2n\)的数组\(c\),初始化两个指针\(x=y=1\)(这里数组下标从\(1\)开始)......
  • C语言-复杂的指针关系
     非法的指针 指针表达式    函数指针函数指针-Sunsin-博客园(cnblogs.com)#include<stdio.h>intmain(){int*a;*a=12;return0;}......