欢迎光临散文网 会员登陆 & 注册

C语言数组名是“地址常量”和指针数组,结构体类数组

2023-09-08 00:07 作者:独眼的安提柯  | 我要投稿

复习(C语言基础知识) 一,switch case default语句 1switch()和case()内的数据类型必须一样 2.case()内的必须是常量 3switch匹配和他满足的case且如果不遇到break程序会一直向下执行(会进入下面不满足的下面case语句也会进入default语句) 4,如果所有case语句都不满足则进入default语句(default语句可以程序写在任何位置但可以默认在最后因为执行完所有case才会看default) 二,continue和break continue跳出每次循环立即进入下一次循环 break跳出本层循(内循环)环立即进入下一层循环 三,字符串结尾有/0如果位置允许任然会自动添加/0

正文开始 本文主要介绍了 char a【】; char *p=a; 这里p和数组名a都表示数组首元素的地址那么他们有啥不同呢 1 p可以被重新赋值 a作为地址常量不行 2 sizeof(a)求的是字符串a的字节数 sizeof(p)始终等于4 一,数组a【】的数组名是地址常量 *a是常指针(方向固定指向的地址固定) 比如 int a【】={1,2,3} 这里定义了一个数组a 这里数组名a(或者是*a)就是一个常指针也就是这个指针方向不能改变 比如我们不能int p=3 然后让 a=&p 也不能进行 a++这种操作 那么如何利用数组名a调用数组中的元素呢 我们现在定义一个数组 然后用一个指针p指向数组首元素地址(数组名a) 其实这里p=a//但是其实a和p还是有区别的 因为a是地址常量是没法变的 而p这个指针方向是可以改变的 此外

所以这里对a赋值是不合法的(不能对常量赋值)

但是我们改动p的位置是合法的 几种合法调用数组a第二个元素的方法 1,利用a【2】

2,利用p【1】//这里p【1】等价于*(p+1)

3利用*(p+1)

4.虽然无法改变地址常量a 但可以利用*(a+1)来输出第二个元素

看几个数组名是地址常量(无法变化)例题

这个程序是报错的 因为有数组名str++这个语句 有a++或a=a+1的语句都是错的

这里有数组名a++所以也是错的 二,数组指针(数组元素的类型都是指针)

这个程序输出 5 4第一个5很好理解因为包含/0 char *pa【3】就是定义了一个数组元素都是地址类型的一维数组 数组的第一个元素是字符串“a”的首地址 数组第二个元素是字符串“bb”首地址 数组第三个元素是字符串“ccc”首元素地址 那么第二个4是如何来的 我们知道指针变量的字节数是4

我们看这个程序 有力的证明了虽然 p=a 但实际上指针变量p和地址常量a还是不一样 sizeof(a)求的是a这个字符串的字节数 sizeof(p)也就是sizeof(指针)默认为4 所以这题答案 5 4 三,结构体类型的数组

这题答案就是zhao 10不多说了

C语言数组名是“地址常量”和指针数组,结构体类数组的评论 (共 条)

分享到微博请遵守国家法律