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
浙公网安备 33010602011771号