C指针——知识点集锦

发布时间 2023-04-15 15:42:24作者: blogzzt
  • CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
  • 变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。
  • 指针变量:如果一个变量存储了一份数据的指针(地址)
    1. int a = 100;
    2. int *p_a = &a;
  • 在定义指针变量 p_a 的同时对它进行初始化,并将变量 a 的地址赋予它,此时 p_a 就指向了 a。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&,否则是不对的。
  • 定义指针变量时必须带*,给指针变量赋值时不能带*
  • 指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:*pointer   (解引用)
  • 指针变量的加减法:pa、pb、pc 每次加 1,它们的地址分别增加 4、8、1,正好是 int、double、char 类型的长度;
  • a 的类型为 int,占用 4 个字节,pa 是指向 a 的指针,如图所示:

     

     

  •  如果pa++,则:

  •  

  • // 数组名可以认为是一个指针,它指向数组的第 0 个元素
    int
    arr[] = { 99, 15, 100, 888, 252 }; int len = sizeof(arr) / sizeof(int); //求数组长度 int i; for(i=0; i<len; i++){ printf("%d ", *(arr+i) ); //*(arr+i)等价于arr[i] }

    // 我们使用了*(arr+i)这个表达式,arr 是数组名,指向数组的第 0 个元素,表示数组首地址, arr+i 指向数组的第 i 个元素,*(arr+i) 表示取第 i 个元素的数据,它等价于 arr[i]。
  •