开发者学堂课程【你的第一门 C 语言课:指针和二维数组】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/444/detail/5479
指针和二维数组
内容介绍:
一、 二维数组的定义
二、 指针数组和数组指针
三、 数组指针
一、 二维数组的定义
在 c 语言中,并没有真正意义上的二维数组,二维数组只是简单的通过线性方式进行扩展的,如下图:
这个二维数组事实上就是定义4个元素的一维数组,然后每个元素都是包含五个整型变量的一维数组,所以在内存中仍然是有一个线性方式进行存储的
假设定义了二维数组 array[4][5]
Array 是二维数组的首地址,在整个数组中,数组名就是第一个元素的指针,也就是地址,由于二维数组实际上是一维数组的扩展,所以 array 可以理解为:指向包围五个元素的数组的指针。
证明案例:
#include
.
h>
int main( )
{
char str[] = "I Love FishC. com!" ;
char *target = str ;
int count =0;
while (*target++ != '\0')
{
count++ ;
}
printf("总共有%d个字符! \n", count);
return 0 ;
}
结论:数组名只是一个地址,而指针是一个左值。
#include
int main()
{
int array[4][5] = {0};
//打印出整型所占用的空间
printf("sizeof int: %d\n", sizeof(int));
//打印出array的地址(二维数组首地址)
printf("array: 8p\n
“
,array) ;
//打印array+1的值(地址)
printf( " array+1:%p\n",array +1
);
return 0 ;
}
运行:gcc testl.c && ./a. out
结果:
sizeof int: 4
array: 0xbfc34320
array+1:0xbfc34334
结论:两个地址相减就能知道跨度是多少
*(array+1)表示:
- 指向第二行子数组第一个元素的指针
- Array+1同样也是指向五个元素数组的地址
- l *(array+1)=array[1],因为左边是右边的语法谈(添加一个新的功能方便程序
员的使用),使用 array[1]这个会便捷轻松许多
解引用:把一个地址的值取出来
修改代码:
#include
int main( )
{
//赋不一样的初值
int array[4][5] = {0};
int i,j,k=0;
//双重循环
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{