深入理解c语言指针与内存
2022/1/6 7:03:57
本文主要是介绍深入理解c语言指针与内存,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、Example 1
void f(void) { int *p = (int*)100; printf("%d\n",(int)p+1); printf("%d\n",(int)(p+1)); } int main(int ac, char **av) { f(); return 0; }
运行结果:
101 104
二、int指针转换为char指针。
#include <stdio.h> int main() { int a = 8; int* b = &a; int *c = (int*)((char*)b + 1); printf("b = %p, c = %p\n", b, c); *c = 8; printf("%d\n", a); printf("b = %p, c = %p\n", b, c); printf("%d\n", *c); return 0; }
运行结果:
b = 0061FEC4, c = 0061FEC5 2056 b = 0061FEC4, c = 0061FE00 1988445728
运行完第7行:整数a的地址为b = 0x61fec4,内存值为08000000;指针c指向0x61fec5,是a的第二个字节的地址。(小端存储)
运行完第8行,对c指向的内存赋值,c地址之后的四个字节被写为 08000000,因此a指向的内存被写为:00000808(b) = 2056(d)。
。
但由于c的地址也正好因此被破坏了,被改为0061FE00,因为此次输出*c的内容将是未知的。
三、Example 3
S6.828
#include <stdio.h> #include <stdlib.h> void f(void) { int a[4]; int *b = malloc(16); int *c; int i; printf("1: a = %p, b = %p, c = %p\n", a, b, c); c = a; for (i = 0; i < 4; i++) a[i] = 100 + i; c[0] = 200; printf("2: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n", a[0], a[1], a[2], a[3]); c[1] = 300; *(c + 2) = 301; 3[c] = 302; printf("3: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n", a[0], a[1], a[2], a[3]); c = c + 1; *c = 400; printf("4: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n", a[0], a[1], a[2], a[3]); c = (int *) ((char *) c + 1); *c = 500; printf("5: a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d\n", a[0], a[1], a[2], a[3]); b = (int *) a + 1; c = (int *) ((char *) a + 1); printf("6: a = %p, b = %p, c = %p\n", a, b, c); } int main(int ac, char **av) { f(); return 0; }
运行结果:
1: a = 0061FEA0, b = 007515B8, c = 0000003D 2: a[0] = 200, a[1] = 101, a[2] = 102, a[3] = 103 3: a[0] = 200, a[1] = 300, a[2] = 301, a[3] = 302 4: a[0] = 200, a[1] = 400, a[2] = 301, a[3] = 302 5: a[0] = 200, a[1] = 128144, a[2] = 256, a[3] = 302 6: a = 0061FEA0, b = 0061FEA4, c = 0061FEA1 Process finished with exit code 0
这篇关于深入理解c语言指针与内存的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解
- 2024-12-20利用Gemini构建处理各种PDF文档的Document AI管道