用指针取二维数组的值 C语言指针和数组结合起来该怎么学?
C语言指针和数组结合起来该怎么学?
我用C语言开发十几年了,经常看到一些新手对指针和数组很迷茫。
排列
首先是array,一个数组声明后就有内存了,比如char a[10],那么数组A就有10个字节的内存。
所以可以带下标使用,只要下标不超过10-1,就不会出错。
针
如果你把数组想象成一串粘在一起的盒子,指针就是一个钩子。钩子被钩住的时候只能用一块内存。比如声明一个指针p: char * p,这时可以 不要用它。只有在P挂接一块内存后,也就是赋值后,才能使用。比如p a或者p ampa[0]。
注意
指针本身也有内存,比如int b,其中b取4个字节,那么char *p,p的类型是char *,所以p本身也取4个字节。也可以取它的地址,也就是二级指针:char **pp p。
数组本身也可以看作是指向一块内存的指针,指针就是数组名。比如上面的一个。您可以将a分配给p: p a。更常见的情况是,当调用函数时。比如有一个排序函数:qsort(char *p,int n),需要一个数组和数组中的元素个数作为参数。可以这样调用:qsort(a,10)。
欢迎讨论关注我的头条号。
指向整型数组的指针如何用?
数组指针(也称为行指针)
定义int (*p)[10]
()具有高优先级。首先,它意味着P是一个指向整数一维数组的指针。这个一维数组的长度是10,也可以说是P的步长,也就是说当执行p 1时,P会跨越10个整数数据的长度。
示例:
Int (*p)[4] //这个语句定义了一个数组指针,指向一个有四个元素的一维数组。
所以数组指针也叫一维数组指针,也叫行指针。
点阵
定义int *p[n]
[]具有高优先级。先和P组合成一个数组,然后int*显示这是一个整数指针数组,有n个指针类型数组元素。这里执行p 1,那么p指向下一个数组元素,所以赋值是错误的:pa;因为P是不可知的表示,所以只有p[0],p[1],p[2]...p[n-1],它们是指针变量,可以用来存储变量地址。但也可以是这样的*pa其中*p代表指针数组第一个元素的值和a的第一个地址的值。
将二维数组赋给指针数组:。
int *p[3]
int a[3][4]
P //这个语句表示p数组指向下一个数组元素。注意:这个数组的每个元素都是一个指针。
对于(i0ilt3i)
p[i]a[i]
此处int*p[3]表示一维数组中有三个指针变量,分别是p[0]、p[1]和p[2]。
所以要分别赋值。
这样,两者的区别就清楚了。数组指针只是一个指针变量,在C语言中似乎是专门用来指向二维数组的,它占用了内存中一个指针的存储空间。指针数组是多个指针变量,以数组的形式存在于内存中,占用多个指针的存储空间。
C语言30天核心突破
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。