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

 

posted @ 2022-04-02 21:47  One7  阅读(28)  评论(0编辑  收藏  举报