C语言浅谈理解一(数组与指针)

学习C语言也有几年的日子了,转移到Java等面向对象或者是更加高级的的语种在我的身边也有很多很多的例子,所以,我想写一点东西下来,即是重温,也是分享,也是提升。希望大家能和我一起共同进步。

All right,接下来我们谈谈我所书写的文章的基本要求
      (1)大家看到我写的文章如果发现错误请您务必给我纠正出来,在这里我先感谢各位读者。

(2)大家在看我的文章的同时,如果有不同的理解也请您与我交流,我是一个比较平和的人,希望获得更多的灵感去突破我自己,也想告诉大家,如果你身处在一个比较落后的地方,呢么希望您能跳出圈子,如果您无法突破自己,希望您能够找我,让我和您谈谈,说不定咱们之间会有不一样的火花产生。

(3)知识是需要分享才有效果的,我说的理解,我的想法都会在我的文章里有所表达,希望您在看文章的时候也要如此,怀着真诚。

开头的话

      先说说选择的语言,本文的语言我是用的是C语言,是因为他更加能让人感受到思维的存在,对于进度我的开篇就是从基本存储单元数组开始说起,如果对循环,基本类型,没有概念的读者,请私信我,我会和您单独交流,当然,也希望您能自己去弄明白,这样对自己会有更深度的理解,文章的更新的时间也是随机的,我会经我所能加快更新,希望大家能够谅解。

第一个论述:数组和指针

数组

1、           数组: 数组是由数据类型相同的一系列元素组成的,通过数组的声明告诉编译器数组内含有多少个元素以及数据的基本类型,编译器根据这些信息正确的创建数组,当然在普通变量可以使用的类型,数组的元素都可以使用。

看下下面的代码:

/*声明数组*/

int main(){

float  array[300];

char  array [20];

int   array2[11];

return 0;

}

代码中[]表明array,array 1,array2都是数组,[]中的内容表明有多少个元素,在元素访问中,就是通过[]中的数字来引用的,所以数组为引用数据类型,接下来就他的引用代码:

int  main(){

int array2[11];

intb=array2[5];  //此处就是引用数组中的值;

return 0;

}

代码中实现的就是数组的引用,array[5]此时引用的是该数组的第6个元素,因为数组的下标是从0开始的,也是就说存在N个元素,他的第M(M<N)个元素的下标是(M-1),当然,这都是大家非常熟悉的,下面我们说些别得东西吧。

2、           初始化数组

数组通常用来存储数据,加入现在有10个整形数字需要被存储,呢么就设置10个大小的数组去存他,如果他是不变的数值,呢么在程序的开始我们就应该去将他们填入数组,现在我们说说数组的初始化。

            呢么看看常用的初始化方式:

            int  main(){

int array2[11]={ 0,1,2,3,4,5,6,7,8,9};

intb=array2[5];  //此处就是引用数组中的值;

return 0;

}

此时就将该数组初始化完成了,每个元素之间用“,”隔开,当然在元素和逗号之间可以存在空格,now,现在这个数组里已经被填满了,如果你想你的这个数组只能读不能写,呢么在他的前面加上const关键字就可以啦。

特殊情况的说明:

      如果你定义的数组你忘记了初始化,你尽可以把他输出试试,你会发现一些莫名的数字,这些数字其实是内存相对应位置上现有的值,所以,每个人的结果都是不同的,但别这样做,很多时候必须注意这一点,当然有的高级的编译器会提示你,但是一个不好的习惯。

      如果你在初始化的时候没有填满整个元素而是忘了几个元素没填,例如例子中的数组有10个元素,而你只写了8个,那么气的元素都变成了0,这个可以自己去试试。

      如果你在初始化的时候填多了,呢么对不起,编译器就会报错,呢么如果你使用例子中的方法将元素填满,大可以不写[]中的数字,那么编译器就会帮你完成。

3、           数组的遍历

就如之前的定义,引用一个元素的方法可以用在每个元素身上,所以需要循环去实现遍历,直接上代码:

int  main(){

int array2[10]={ 0,1,2,3,4,5,6,7,8,9};

for(inti=0;i<10;i++){

printf(“%d”,array2[i]);

}

return 0;

}

好了遍历完成,关于循环,呢几种方式都可以使用,自己下去看下就好啦。

在这里我有一个问题,如果我不知道这个数组的大小,循环的次数如果多了就会有数组报错,如果少了,就会漏掉元素没有遍历,现在给你一个好的办法去解决,很好理解,一个箱子的体积是M,100个箱子无缝连接的体积N就是100*M,现在知道N和M是多大知道啦那么有多少个箱子自然也就完成了那么代码变成了这样:

int  main(){

int array2[10]={ 0,1,2,3,4,5,6,7,8,9};

for(int i=0;i<sizeof array/sizeof array[0];i++){

printf(“%d”,array2[i]);

}

return 0;

}

此时就可以啦。

4、           二维数组的说明

对于二维数组,我用一张图来解释

我来解释一下这个图,二维数组在计算机里其实是不存在的,它首先要有一个一维数组,在每一个元素李存储下一个一维数组的指针,当指针的概念稍后我会解释,那么现在只需要解了,那么接下来二位数组的表示就和一维数组一样的简单了,上代码:

int  main(){

int array2[10][10]={{ 0,1,2,3,4,5,6,7,8,9},{1},{2},{3},{4},{5}};

b=array2[1][1];

for(int i=0;i<sizeof array/sizeof array[0];i++){

for(int j=0;j<sizeof array[i]/sizeof array[i];i++){

 

printf(“%d”,array2[i][j]);

}

}

return 0;

}

好了,其实就和一维数组是一样的,接下来我们看指针,指针是一个难点,也是最不好理解的一部分,我们一起去看看。

在数组里找准数组的边界是尤为重要的,C语言对程序员的信任度是非常高的,所以在使用C语言编程的时候 数组的边界一定需要小心控制,不然编译器会向嘲笑一样报错。

原本想数组和指针一起聊一聊,但是发现指针需要说明的地方太多了,下次一并发出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值