当前位置: 首页 > article >正文

有问题未解决(9.28)

#include <stdio.h>  

int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
    int arr[] = { a,b,c };
    arr[0] = 10;
    printf("%d\n", a);//打印结果为1;


    

    return 0;
}

颠覆认知了,或许也没有颠覆

arr是一个int类型的数组,他存的就是一个数,而不是变量,a的地址和arr的地址并不一样

char arr1[] = "hello bit";
printf("%c\n", *arr1);//h
printf("%c\n", *(arr1+1));//e

数组名+1,就是下一个元素的地址,int类型的数组名+1移动四个字节,char类型的数组名+1移动1个字节,数组的类型决定了数组名+1移动的距离

二维数组的数组名代表什么?

把二维数组想象成一维数组,二维数组的数组名代表的就是第一行的地址

不要写成 int* arr[3] = { &a,&b,&c };这个地方写成&a会有什么结果目前不确定,有待商榷

鹏哥之前讲过打印二维数组的多种形式,但是我忘了

a数组,b数组,c数组是独立的,并且不是连续的,只不过通过指针数组跳跃地将它们访问

#include <stdio.h>  

int main()
{
    int a = 1;//0x0000004DD7AFFBC4//int类型是四个字节,32个比特位,a的地址加上32正好到b
    //错了,a和b并不是两个相邻的整型变量,真正相邻的整型变量的地址相差应该是4,
    // 一个字节代表一个地址,而不是一个比特位代表一个地址
    int b = 2;//0x0000004DD7AFFBE4
    int c = 3;
    int arr[] = { a,b,c };
   

    //char arr1[] = "hello bit";
    //printf("%c\n", *arr1);//h
    //printf("%c\n", *(arr1+1));//e
    //printf("%p\n", arr1);
    //printf("%p\n", &arr1[0] + 1);
   /* int a[] = {1,2,3,4,5};
    int b[] = {2,3,4,5,6};
    int c[] = {3,4,5,6,7};*/
   /* int a = 0;
    int* p = &a + 1;
    printf("%p\n", p);8
    printf("%p\n", &a);4
    printf("%p\n", &a + 1);8*/
    //a的地址是4,&a+1后的结果是8而不是5,说明变量的类型,会影响变量地址加减时的步长

    return 0;
}

int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
int(*pa)[10] = &a;
printf("%p\n", pa);//pa相当于&a
printf("%p\n", *pa);//*pa相当于a,即数组名

&arr的步长是40,所以需要一个步长类型为40的指针来接收

数组名是首元素的地址,arr2的首元素类型是一级指针,一级指针的地址要放到二级指针里面,实际上,arr2就是一个二级指针

[5]之所以不能省略是因为arr的类型是int[5],它的步长是5,和指针类似,一般情况下,指针的类型要和传过去的地址的类型一样


http://www.kler.cn/news/323695.html

相关文章:

  • Git的安装 + 基本操作
  • ubuntu中库文件安装的位置以及头文件的位置
  • 123法则与2B法则
  • Linux——k8s组件
  • Qt实现自定义的文件对话框CustomFileDialog
  • 【HarmonyOS】应用权限原理和封装
  • 免费视频无损压缩工具+预览视频生成工具
  • Dubbo 如何使用 Zookeeper 作为注册中心:原理、优势与实现详解
  • 校园二手交易平台的小程序+ssm(lw+演示+源码+运行)
  • Vue ElemetUI table实现双击修改编辑某个内容
  • Leecode刷题之路从今天开始
  • 面经 | ES6
  • 时间技能物品竞品抢拍拍卖发布h5公众号小程序开源版开发
  • VueUse-----基于 Vue 3 的实用工具库,常用功能介绍及使用案例
  • 代码随想录第二十天:动态规划、斐波那契数列、爬楼梯、最小体力爬楼梯
  • Java网络编程、正则表达式、单例设计模式与Lombok
  • 南平自闭症寄宿制学校:让孩子自信绽放
  • 什么是后端开发 ?
  • 安装 Nacos 启动报错 java.lang.IllegalArgumentException: db.num is null
  • JavaWeb图书借阅系统
  • 【3D分割】Segment Anything in 3D with Radiance Fields
  • 【MySQL】数据库基础认识
  • GIS--为研究区准备数据
  • 基于STM32的远程工业控制系统架构设计:MQTT通信、React界面与FreeRTOS优化的综合应用
  • 【React】原理
  • 微信小程序开发第八课
  • 16.第二阶段x86游戏实战2-发包函数和怎么去找改写过的发包函数
  • 进程与线程之间的关系与区别
  • C++20中头文件compare的使用
  • 数据仓库简介(一)