欢迎来到天天文库
浏览记录
ID:32192657
大小:47.89 KB
页数:3页
时间:2019-02-01
《c语言中的几个容易混淆问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、关于指针,数组,二级指针,数组指针,指针数组首先,在C语言中,最难的就是定义变量,给变量赋值。其实所有的C程序拉出来看到的都是在定义变量,给变量赋值,中间的程序通过运算得到的结果,也可以算是给变量赋值。 (一)先说定义变量: 因为变量名都是自己定义的标示符,然后最重要的就是变量的类型了。虽然大多C语言书上都列举出了众多的数据类型,但是个人理解,那些都是最基本的一些东西,其实还有很多中类型我们经常遇到,却不知道这些还是数据的类型。 一,指针类型; int*
2、 ,short* ,char*, int**,char**, longint****************; 这些都是指针类型,很显然,可以看出指针类型就是在基本数据类型前面加个* , 例如定义一个指针变量, int* p; 这个变量p,就有两种含义,第一是,这是一个指针变量,第二是他指向int类型。 我们都知道对于32位pc机, 指针变量都是四个字节。 int** p;对于变量p, 也有两个含义,第一这是一个指针变量,第二,它指向一个int*类型.
3、 二,数组类型。 这里估计,有人就质疑了,C语言里面还有数组类型吗? 有。并且我们一直在写,一直在用,我们一直不知道,是因为C语言的书写方式导致我们不知道有这种类型。 对于一个一维数组, int a[10]; C语言的书是这样解释这个东西的,这是个一维数组,也就是一次性定义了十个变量。 在内存中呈线性排列。。。。。。其实我个人理解这个东西应该这样定义,这是一(个包含10个int 元素的类型的) 变量。我们在描述一个变量的时候,总说,这是一个XXX类型的变量,所以在这里对于int a[10];应该这样描述,这是一个有10
4、个int元素的类型的 变量a; 所以写成 这样 int[10] a; 这是一个变量但是它包含十个元素,这是不是跟我们学过的一个东西特别像? 结构体,结构体不就是包含里XXX元素的类型,然后用这种类型定义了一个变量,叫做结构体变量。 C语言给结构体类型起名字了,却没给数组类型起名字,所以我们不知道。但是定义数组的时候写成 int[10] a;这样很多编译器都编译不通过,或者说没有编译器认识它,之所以这样写,只是要明白,数组的原理,因为后面对于能正确理解数组指针,至关重要。。。。 三,指针数组;
5、 指针数组很简单,就是int* a[10]; 类型换了一下而已,按照上面的解释更直观一点写成int*[10] a; 这样,就可以解释为,定义了(一个包含10个指针类型元素的)这种类型的变量 a; 四,数组指针, 若看完了上面对于数组类型的解释以后,对于数组指针是不是已经很简单了。定义一个指针数组类型的变量 是 int* a[10];前面说了,更直观的写成: int*[10] a; 那么定义一个指针变量,就是在原有类型前面加一个*, 也就是int*[10]* p; 但是
6、C语言里面不能这样写,规定要把[10] 写到后面,所以就成了int* * p[10]; 但是现在这样就有个问题了,之前有个[10]在中间隔开,倒是可以区别,(int*[10])* p; 现在[10] 写到了后面,无法区别这两个*,到底属于那边的,加空格没作用,所以只能加最有权威的分隔符() 那么就成了int* (*p)[10]; 这里定义了一个指向(有10个int*类型元素的数组)的类型的变量 p; 不好意思,这里有些太绕口,不好理解,确实不好理解,之所以不好理解,是因为我们书写习惯了,看习惯了目前C的这种书写形式,对一些东西根深蒂固。就像很多
7、新人最开始学习指针的时候都是这样定义的,int *p; 这样写虽能编译通过,但是他已经把指针理解错了,指针不就是一个普通变量,int* p; 就是一个变量p,类型是int*类型。。......对于学习C语言的新人,要永远记住,对于任何变量,都是某某某类型 的 一个变量。 这个类型可以是任何类型。不光是书上的那几种类型,有很多类型都是我们自己定义的,例如int******** 这种类型。 上面说了这么多,最重要的
此文档下载收益归作者所有