简单数组(一维数组、二维数组)

一维数组:

创建:type_t   arr_name  [const_n]    (元素类型  数组名  [常量])(注:[ ]中不能为变量。)

          例如:int  arr1[10];    char arr2[5];    float  arr3[4];   double arr4[5];   

初始化:在创建数组的同时给数组的内容一些合理的初始值。

           例如:int arr1[5]={1,2,3,4,5};  char arr2[3]={'a','b','c'};   float arr3[3]={1.23,4.33,5.53};   int arr4[5]={3,2,1};(数组中              最后两个元素默认为0)

注:区别下面的两个代码;

       char arr1[ ]="abc";

       char arr2[3]={'a','b','c'};

       前者内存分布为:‘a'  'b'  'c'  '\0'      后者内存分布为 ‘a’'b'  'c' 。前者初始化为字符串时,结束标志‘\0'也会被赋值为        数组的内容。

使用:用下标引用符[ ]来访问数组.下标从0开始。

          数组大小的计算方式:sz=sizeof(arr)/sizeof(arr[0]);

存储:数组在内存中是连续存放的。

指针访问:数组的数组名其实是数组首元素的地址

#include <stdio.h>
int main()
{
   int arr[]={1,2,3,4,5};
   printf("%p\n",arr);
   printf("%d\n",*arr);
 return 0;
}

如上例:输出结果为:00EFFE84 (不唯一)    1       (首元素地址、首元素)

通过对数组名+整数的运算,可以获取到数组每个元素的地址。

如下例:第一个for循环初始化,第二个for循环输出。(p+i)指的是arr中的第i个元素的地址,则*(p+i)指的是数组arr中第i 个元素。

#include <stdio.h>
int main()
{
	int arr[5]={0};
	int i = 0;
	int *p = arr;
	for(i=0;i<sizeof(arr)/sizeof(arr[0]);++i)
	{
		*(p+i) = i;
	}
	for(i=0;i<sizeof(arr)/sizeof(arr[0]);++i)
	{
		printf("%d\n",*(p+i));
	}
return 0;
}

二维数组

创建:type_t   arr_name  [const_n][ const_n]    (元素类型  数组名  [常量1][常量2]

     (注:[ ]中不能为变量。常量1可以省略)      

    例如:int arr[3][4];   char arr2[2][5];

初始化:在创建数组的同时给数组的内容一些合理的初始值。

    例如:int arr1[5][1]={1,2,3,4,5};  char arr2[3][3]={{'a','b','c'},{'d','e','f'},{'g','h','k'}};

    int arr3[][3]=[{1,2},{3,4}};   

    数组arr3中元素为

    1 2 0
    3 4 0

使用:用下标引用符[ ]来访问数组.下标从[0][0]开始。

   二维数组可以看成一维数组。

存储同一维数组一样,在内存中都是连续存储的。

指针访问:数组的数组名其实是数组首元素(一维数组)的地址

       通过对数组名+整数的运算,可以获取到数组每个元素的地址。

      设p是指向数组arr的指针变量。

      若p=arr[0];p+i指向arr[0][i].

      若p= &arr[0]+1;p+i指向arr[1]中的第i个元素。

例如:(sizeof求字节个数;strlen求字符串长度,遇到‘\0’为止)

#include <stdio.h>
int main()
{
	int arr[3][4]={{0,1,2,3},{5,6,7,8},{9,10,11,12}};
	int *p0 = &arr[0];
	int *p1 = &arr[0]+1;
    printf("%d\n",*(p0+1));
	printf("%d\n",*(p1+1));
return 0;
}
结果分别为1 和6 。

数组的运算:

数组名代表整个数组的时候只有两种情况:

(1)sizeof(数组名),这里的数组名表示整个数组。(2)&数组名,这里的数组名表示整个数组。

一维数组

#include<stdio.h>
int main()
{
	int a[] = {1,2,3,4};
	printf("%d\n",sizeof(a));          //16
	printf("%d\n",sizeof(a+0));        //4
	printf("%d\n",sizeof(*a));         //4
	printf("%d\n",sizeof(a+1));        //4
	printf("%d\n",sizeof(a[1]));       //4
	printf("%d\n",sizeof(&a));         //4
	printf("%d\n",sizeof(*&a));        //16
	printf("%d\n",sizeof(&a+1));       //4
	printf("%d\n",sizeof(&a[0]));      //4
	printf("%d\n",sizeof(&a[0]+1));    //4
return 0;
}

字符数组

#include<stdio.h>
int main()
{
	char a[] = {'a','b','c','d','e','f'};
	printf("%d\n",sizeof(a));          //6   
	printf("%d\n",sizeof(a+0));        //4   (第一个元素的地址)
	printf("%d\n",sizeof(*a));         //1   (第一个元素)
	printf("%d\n",sizeof(a+1));        //4   (第二个元素的地址)
	printf("%d\n",sizeof(a[1]));       //1   (第二个元素)
	printf("%d\n",sizeof(&a));         //4   (地址)
	printf("%d\n",sizeof(*&a));        //6
	printf("%d\n",sizeof(&a+1));       //4
	printf("%d\n",sizeof(&a[0]));      //4
	printf("%d\n",sizeof(&a[0]+1));    //4
	return 0;
}
#include<stdio.h>
int main()
{
	char a[] = {'a','b','c','d','e','f'};
	printf("%d\n",strlen(a));          //19   
	printf("%d\n",strlen(a+0));        //19    
	printf("%d\n",strlen(*a));         //错误   
	printf("%d\n",strlen(a+1));        //18     
	printf("%d\n",strlen(a[1]));       //错误   
	printf("%d\n",strlen(&a));         //19     
	printf("%d\n",strlen(*&a));        //19
	printf("%d\n",strlen(&a+1));       //随机值
	printf("%d\n",strlen(&a[0]));      //19
	printf("%d\n",strlen(&a[0]+1));    //18
	return 0;
}
#include<stdio.h>
int main()
{
	char a[] = "abcdef";
	printf("%d\n",strlen(a));          //6  
	printf("%d\n",strlen(a+0));        //6    
	printf("%d\n",strlen(*a));         //错误   
	printf("%d\n",strlen(a+1));        //错误     
	printf("%d\n",strlen(a[1]));       //错误   
	printf("%d\n",strlen(&a));         //6    
	printf("%d\n",strlen(*&a));        //6
	printf("%d\n",strlen(&a+1));       //随机值
	printf("%d\n",strlen(&a[0]));      //6
	printf("%d\n",strlen(&a[0]+1));    //5
	return 0;
}

#include<stdio.h>
int main()
{
	char a[] = "abcdef";
	printf("%d\n",sizeof(a));          //7 
	printf("%d\n",sizeof(a+0));        //4    
	printf("%d\n",sizeof(*a));         //1   
	printf("%d\n",sizeof(a+1));        //4     
	printf("%d\n",sizeof(a[1]));       //1  
	printf("%d\n",sizeof(&a));         //4    
	printf("%d\n",sizeof(*&a));        //7
	printf("%d\n",sizeof(&a+1));       //4
	printf("%d\n",sizeof(&a[0]));      //4
	printf("%d\n",sizeof(&a[0]+1));    //4
	return 0;
}

#include<stdio.h>
int main()
{
	char *p = "abcdef";
	printf("%d\n",sizeof(p));          //4 (a的地址)
	printf("%d\n",sizeof(p+1));        //4 (b的地址)
	printf("%d\n",sizeof(*p));         //1 (元素a)  
	printf("%d\n",sizeof(p[0]));       //1 (元素b)
	printf("%d\n",sizeof(&p));         //4 (指针p的地址)
	printf("%d\n",sizeof(&p+1));       //4 (下一个指针地址)
	printf("%d\n",sizeof(&p[0]+1));    //4 (b的地址)
	return 0;
}
#include<stdio.h>
int main()
{
	char *p = "abcdef";
	printf("%d\n",strlen(p));          //6      (整个字符串)
	printf("%d\n",strlen(p+1));        //5      (b之后的字符串)
	printf("%d\n",strlen(*p));         //错误    
	printf("%d\n",strlen(p[0]));       //错误
	printf("%d\n",strlen(&p));         //随机值 (指针p的地址)
	printf("%d\n",strlen(&p+1));       //随机值 (下一个指针地址)
	printf("%d\n",strlen(&p[0]+1));    //4      (b之后的字符串)
	return 0;
}

二维数组

#include<stdio.h>
int main()
{
	int a[3][4]={0};
	printf("%d\n",sizeof(a));          //48 
	printf("%d\n",sizeof(a[0][0]));    //4 
	printf("%d\n",sizeof(a[0]));       //16   
	printf("%d\n",sizeof(a[0]+1));     //4
	printf("%d\n",sizeof(a+1));        //4 
	printf("%d\n",sizeof(&a[0]+1));    //4 
	printf("%d\n",sizeof(*a));         //16 
	printf("%d\n",sizeof(a[3]));       //16
	return 0;
}






猜你喜欢

转载自blog.csdn.net/zr147258369/article/details/80381823
今日推荐