C语言的指针与数组

函数定义

        参考书籍章节9.7

        无论函数定义的参数是数组还是指针,在编译的时候,编译器都将在栈上开辟一个空间存放入参的地址,换句话说,也就是在函数内部都当做指针处理。

#include <stdio.h>
#include <stdlib.h>

char ga[] = "abcdefgijklm";

void my_pointer_func(char *ca)
{
    printf("my_pointer_func\n");
    printf("%#x \n", &ca);
    printf("%#x \n", &ca[0]);
    printf("%#x \n", &ca[1]);
    printf("%#x \n", ++ca);
}

void my_array_func(char ca[])
{
    printf("my_array_func\n");
    printf("%#x \n", &ca);
    printf("%#x \n", &ca[0]);
    printf("%#x \n", &ca[1]);
    printf("%#x \n", ++ca);
}

int main()
{
    my_array_func(ga);
    my_pointer_func(ga);
    return 0;
}

my_array_func
0x61fe00
0x403010
0x403011
0x403011
my_pointer_func
0x61fe00
0x403010
0x403011
0x403011

多维数组

参考书籍章节10.1

  • 数组的偏移量总是在编译时确定的,

arr[i][j]、int arr[5][10]、int *arr[10]

        当你使用arr[i][j]时,你不能通过你的使用方式知道arr的声明是int arr[5][10],亦或是int *arr[10],以上两种声明,你都可以使用arr[i][j]这种形式来访问。但是需要注意的是,编译器生成的代码是完全不一样的!因为int arr[5][10]在编译时有了一块确定且连续的内存,编译器完全知道如果想对arr去做偏移,但是int *arr[10]却是灵活多变的,因为它只是有10个连续内存空间的整形指针而已,指针指向的空间是不确定的,所以编译器只能让程序运行时再通过计算算出偏移量,而第一种是在编译时就算出来了偏移量

        这里也体现了一部分哲学的内容,如果你想要点东西,就必须要牺牲点其他的东西,比如在这里,你想要灵活性,就牺牲了执行效率。

锯齿数组

参考书籍章节10.3

未完待续

相关推荐

  1. C语言多级指针指针数组数组指针

    2024-07-14 08:22:04       41 阅读
  2. C语言指针数组 指针运算

    2024-07-14 08:22:04       67 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 08:22:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 08:22:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 08:22:04       58 阅读
  4. Python语言-面向对象

    2024-07-14 08:22:04       69 阅读

热门阅读

  1. 菜鸡的原地踏步史08(◐‿◑)

    2024-07-14 08:22:04       26 阅读
  2. Elasticsearch 角色和权限管理

    2024-07-14 08:22:04       24 阅读
  3. Git配置笔记

    2024-07-14 08:22:04       30 阅读
  4. Docker安装Zookeeper、RocketMQ

    2024-07-14 08:22:04       26 阅读
  5. 计算1的数量

    2024-07-14 08:22:04       28 阅读
  6. 特斯拉的选择:.NET技术栈的工业级魅力

    2024-07-14 08:22:04       20 阅读
  7. 1、ASP安全

    2024-07-14 08:22:04       22 阅读
  8. 数据结构第24节 二分查找

    2024-07-14 08:22:04       19 阅读
  9. QComboBox

    2024-07-14 08:22:04       21 阅读
  10. 【PHP】Symfony框架

    2024-07-14 08:22:04       31 阅读
  11. qt 可以滚动区域实验举例

    2024-07-14 08:22:04       24 阅读