请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

c语言数组与指针详解(上)

[复制链接]
查看: 100|回复: 0

2万

主题

2万

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
70839
发表于 2020-1-15 09:22 | 显示全部楼层 |阅读模式
完全搞懂c说话数组与指针

部分援用
根柢常识

1. 指针根柢

我的关键词 c说话数组与指针详解(上)  热门消息


  • &:代表对变量取地址
  • int*或char*大要把这个星号紧贴着变量比如int *a = &b: 代表新建一个用来贮存地址的变量,这也代表&b这个值的范例是int*。
  • int *a, b 或 int* a, b 中只要a是int指针范例,b是int整型。
  • 关于电脑巨细真个会商:大端是指是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。小端是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内在的低地址中。例以下图:
    我的关键词 c说话数组与指针详解(上)  热门消息

  • 假定 int b=4; int *a = &b 则*a=4: 由于*a代表a变量中的地址所指的值。反复一下对照:&b是指针范例,值是地址;*b是现实指针b所指的变量的值。
  • 假如打印地址则用%p,以16进制表现指针的值,而不是用%x,如: printf("%p\n", &i)
  • 32位和64位下指针的优点不同,32位下为4个字节,和int一样,64位下8个字节。
2. 数组根柢


  • 数组特点:

    • 数组巨细一旦界说不成改变
    • 全数的元素具有类似的数据范例
    • 数组中的元素在内存中是连续依次排列的
    • 数组的集成初始化:int a[] = {1,2,3,4,25,6,5,4}; 即让编译器自己来数元素的数目
    • 假如这样赋值:int a[3] = {2}; 则结果是这个数组有三个元素,a[0]=2,a[1]=0,a[2]=0;编译器自动补全前面的数字为0;
    • 集成初始化的定位:int a[6] = {[1] = 2, [3] = 3, 6}; 结果是 a[0]=0, a[1]=2, a[2]=0, a[3]=3, a[4]=6, a[5]=0; 适当初始数据稀疏的数组。
    • 假如想让界说的数组酿成只读,即不成点窜的范例,则可以在最前面加上一个const。如:const int a[2] = {2, 3, 4}; 固然此条也适用于二维数组。
    • 数组只要在最起头即界说初始化的时候可以集成赋值,以下赋值方式毛病:int a[3] = {}; a[3] = {1,2,3}; 这时会毛病,由于这是一个单个元素赋值的方式,况且a[3]已经超越了范围。
    • 求数组的巨细,安定的方式是 sizeof(a)/sizeof(a[0]) ; 就算点窜初始数组a中的数据,也不用点窜遍用时的代码;
    • 数组作为函数参数时,常常必须再用另一参数来传入数组的巨细。

      • 不能在[]中给出数组的巨细
      • 不能在函数中再操纵sizeof盘算数组的元素的个数

    • 界说数组a, b:int a[10]; b=[]; 则不能间接用b=a来给数组b赋值。
    • 对于数组a,&a=a=&a[0]

  • 二维数组:

    • int a[2][3] 相当于一个2行3列的矩阵
    • int a[0][0] 表示第一行第一列,意味着下标一样也是从0起头
    • 二维数组的遍历需要嵌套for循环
    • a[j]表示第i行第j列的元素,a[i,j]是一个表达式,相当于a[j],没故意义,会报错。
    • 二维数组初始化的时候列数可以省略,行数可以由编译器来数。例如:inta[][5] = {{0,1,2,3,4},{2,3,4,5,6}};
    • 初始化二维数组的两种方式:部分初始化则将剩下的那部分赋值为0

      • int a[2][3] = {{5, 6},{7, 8}}; 则a[0][0]=5, a[0][1]=6, a[0][2]=0, a[1][0]=7, a[1][1]=8, a[1][2]=0;
      • int a[2][3] = {5, 6, 7, 8}; 则a[0][0]=5, a[0][1]=6, a[0][2]=7, a[1][0]=8, a[1][1]=0, a[1][2]=0;

    • 三位数组大白方式:比如int box[10][20][30]; 则可以大白成由10个二维数组(每个是20行30列)堆叠起来,这20个数组元素中的每个元素是内含30个元素的数组。

经过步伐加深大白一些概念

1. 数组的名字就相当于这个数组第一个元素的内存地址:
  1. #include  int main(){    int a[10]={1,2,3,4,5,6,7,8,9,10};  //界说一个整型数组,这里a本色上是一个指向数组中第一个数据a[0]的指针    int *p=a;      printf("%d\n",*p);    printf("%d",*(p+1));            return 0;}
复制代码
返回结果为:
1
2
2. 操纵指针对数组举行初始化

[code]#include int main(){    int d[10];    int *e;        e=&d[0]; //e保存了数组d的第一个数据的地址        for (int i=0; i

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 淄博新闻网-淄博日报 淄博晚报 淄博财经新报 掌中淄博 淄博专业新闻资讯发布网站 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表