C指针学习
C语言中所有的数据都可以理解成是地址(指针)+ 类型(对地址的解读)
#include <stdio.h> void printptr(void *p) { printf("p = %p; *p = %016lx\n", p, *(long *)p); } int x; int main(int argc, char *argv[]) { printptr(main); //code printptr(&main); printptr(&x); //data printptr(&argc); //stack printptr(argv); printptr(&argv); printptr(argv[0]); }
#include <stdio.h> #include <assert.h> int main(int argc, char **argv) { int (*f)(int, char *[]) = main; if(argc != 0) { char ***a = &argv, *first = argv[0], ch = argv[0][0]; printf("arg = \"%s\"; ch = '%c'\n", first, ch); assert(***a == ch); f(argc - 1, argv + 1); } }
附一张内存对象图,对应与第二个代码,具体可以通过GDB调试理解其中的含义。
本节内容源自:2020 南京大学计算机系统基础习题课 (蒋炎岩) 链接:https://www.bilibili.com/video/BV1qa4y1j7xk
2022/4/2