数组的相关运算

原创 2018年04月15日 13:33:25

关于数组的运算,需要注意以下几点:

1. sizeof(数组名):数组名表示整个数组

sizeof(数组名)计算的是整个数组的大小,单位是字节

2. &数组名:数组名表示整个数组

&数组名取的是数组的地址,这里的数组名表示整个数组

3. 之外,所有的数组名表示首元素地址

4. 二维数组要看首元素的地址,首先要把二维数组想成一维数组

5. 地址是四个字节

6. strlen的运算遇到'\0'才会结束

一维数组

int a[] = {1,2,3,4};
printf("%d\n", sizeof(a));        //16 注:a表示整个数组
printf("%d\n", sizeof(a+0));      //4 注:a+0表示首元素的地址
printf("%d\n", sizeof(*a));       //4 注:*a表示首元素的地址
printf("%d\n", sizeof(a+1));      //4 注:a+1表示下标为1的元素的地址
printf("%d\n", sizeof(a[1]));     //4 注:a[1]表示下标为1的元素的地址
printf("%d\n", sizeof(&a));       //4 注:&a表示数组的地址
printf("%d\n", sizeof(*&a));      //16 注:*&a表示整个数组
printf("%d\n", sizeof(&a+1));     //4 注:&a+1表示地址(跳过整个数组)
printf("%d\n", sizeof(&a[0]));    //4 注:&a[0]表示首元素地址
printf("%d\n", sizeof(&a[0]+1));  //4 注:&a[0]+1表示第二个元素的地址

字符数组

char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr));        //6 注:arr表示整个数组
printf("%d\n", sizeof(arr+0));      //4 注:arr+0表示首元素的地址
printf("%d\n", sizeof(*arr));       //1 注:*arr表示首元素,即a  
printf("%d\n", sizeof(arr[1]));     //1 注:arr[1]表示第二个元素,即b
printf("%d\n", sizeof(&arr));       //4 注:&arr表示数组的地址
printf("%d\n", sizeof(*&arr));      //6 注:*&arr表示整个数组
printf("%d\n", sizeof(&arr+1));     //4 注:&arr+1表示第二个元素的地址
printf("%d\n", sizeof(&arr[0]+1));  //4 注:&arr[0]+1表示第二个元素的地址

//strlen遇到'\0'才会结束
printf("%d\n", strlen(arr));        //随机数 注:arr表示首元素地址,从首元素向后数字符,而数组里面没有'\0',所以不会结束
printf("%d\n", strlen(arr+0));      //随机数 注:arr+0表示首元素地址,从元素'a'向后数字符
printf("%d\n", strlen(*arr));       //error  注:*arr表示a元素,即数字97
printf("%d\n", strlen(arr[1]));     //error  注:arr[1]表示b元素,即数字98
printf("%d\n", strlen(&arr));       //随机数 注:&arr表示数组的地址,从元素'a'向后数字符
printf("%d\n", strlen(&arr+1));     //随机数 注:&arr+1表示从元素'f'向后数字符
printf("%d\n", strlen(&arr[0]+1));  //随机数 注:&arr[0]+1表示从元素'b'向后数字符


char arr[] = "abcdef"; //包含'\0'
printf("%d\n", sizeof(arr));        //7 注:arr表示整个数组,整个数组有7个元素
printf("%d\n", sizeof(arr+0));      //4 注:arr+0表示首元素的地址
printf("%d\n", sizeof(*arr));       //1 注:*arr表示首元素,即'a'    
printf("%d\n", sizeof(arr[1]));     //1 注:arr[1]表示第二个元素,即'b'
printf("%d\n", sizeof(&arr));       //4 注:&arr表示整个数组的地址
printf("%d\n", sizeof(&arr+1));     //4 注:&arr+1表示地址,跳过整个数组,指向'\0'之后
printf("%d\n", sizeof(&arr[0]+1));  //4 注:&arr[0]+1表示元素'b'的地址

printf("%d\n", strlen(arr));        //6 注:arr表示首元素地址,从元素'a'向后数字符,到'\0'结束
printf("%d\n", strlen(arr+0));      //6 注:arr+0表示首元素地址,从元素'a'向后数,到'\0'结束
printf("%d\n", strlen(*arr));       //error 注:*arr表示'a'元素,即数字97
printf("%d\n", strlen(arr[1]));     //error 注:arr[1]表示'b'元素,即数字98
printf("%d\n", strlen(&arr));       //6 注:&arr表示整个数组的地址,从元素'a'向后数字符,到'\0'结束
printf("%d\n", strlen(&arr+1));     //随机值 注:&arr+1表示跳过整个数组,从元素'\0'向后数字符
printf("%d\n", strlen(&arr[0]+1));  //5 注:&arr[0]+1表示从元素'b'向后数字符,到'\0'结束


char *p = "abcdef";  //p里面存的是字符a的地址
printf("%d\n", sizeof(p));        //4 注:p是指针变量
printf("%d\n", sizeof(p+1));      //4 注:p+1表示b的地址
printf("%d\n", sizeof(*p));       //1 注:*p表示首元素,即元素'a'   
printf("%d\n", sizeof(p[0]));     //1 注:p[0]相当于*[p+0],表示首元素,即元素'a'
printf("%d\n", sizeof(&p));       //4 注:&p表示p的地址,p是char *类型的
printf("%d\n", sizeof(&p+1));     //4 注:&p+1表示地址(跳过一个p)
printf("%d\n", sizeof(&p[0]+1));  //4 注:&p[0]+1表示元素'b'的地址

printf("%d\n", strlen(p));        //6 注:p表示元素'a'的地址,从元素'a'向后数字符,到'\0'结束
printf("%d\n", strlen(p+1));      //5 注:p+1表示元素'b'的地址,从元素'b'向后数字符,到'\0'结束
printf("%d\n", strlen(*p));       //error 注:*p表示首元素
printf("%d\n", strlen(p[0]));     //error 注:p[0]表示首元素
printf("%d\n", strlen(&p));       //随机值 注:&p表示p的地址
printf("%d\n", strlen(&p+1));     //随机值 注:&p+1表示地址(跳过p)
printf("%d\n", strlen(&p[0]+1));  //5 注:&p[0]+1表示元素'b'的地址,从元素'b'向后数字符,到'\0'结束

二维数组

int a[3][4] = {0};
printf("%d\n", sizeof(a));        //48 注:a表示整个数组
printf("%d\n", sizeof(a[0][0]));  //4  注:a[0][0]表示第一行第一个元素
printf("%d\n", sizeof(a[0]));     //16 注:a[0]表示第一行   
printf("%d\n", sizeof(a[0]+1));   //4  注:a[0]+1表示第一行第二个元素的地址
printf("%d\n", sizeof(a+1));      //4  注:a+1表示第二行的地址
printf("%d\n", sizeof(&a[0]+1));  //4 注:&a[0]+1表示第二行的地址
printf("%d\n", sizeof(*a));       //16 注:*a表示第一行
printf("%d\n", sizeof(a[3]));     //16 注:a[3]相当于a[1],sizeof内部表达式不参与运算

Java数组运算

在使用Java进行程序设计的时候,当为一个long型变量赋值一个整数常量时,如果这个值超过int型数据的取值范围,程序就会出现编译错误,但是有一种情况程序不会出错的,就是将多个int型数据进行算数运算...
  • l4432321
  • l4432321
  • 2016-09-05 21:53:32
  • 799

c语言数组、数组相关的计算

数组 1.数组的创建: 元素类型 数组名 [常量或者常量表达式]  如:int arr1[10]; 注:即使是被const修饰的变量也不能作为[]中的内容,它本质上依然属于变量,只是具有常量...
  • lyl194458
  • lyl194458
  • 2016-11-18 08:30:41
  • 1567

matlab 学习之数组运算

数组的运算分为矩阵运算和数组运算两类。 1.4.1矩阵运算 矩阵运算包括矩阵的加、减、乘、除和乘方。 矩阵的加、减和乘法: %矩阵的加法 ...
  • gusgao
  • gusgao
  • 2016-12-20 21:25:33
  • 867

c语言 --关于数组与指针的一些基本运算

一.sizeof()的有关运算1知识:当数组名a单独放在sizeof()内部(即 sizeof(a))时,a表示整个数组;当数组名a单独放在&后面时(即&a),a表示整...
  • xu1105775448
  • xu1105775448
  • 2017-04-20 20:32:16
  • 1696

大整数类的实现包含了加减乘除运算

给出了大整数类的C++代码,实现了加减乘除运算。
  • shineboyxxb
  • shineboyxxb
  • 2016-08-25 20:51:42
  • 416

数组运算相关学习

数组的运算 sizeof运算的是地址长,也就是一个对象或者类型所占的内存字节数。 sizeof()中,只有sizeof(a)指的是数组总大小,&a指的是数组的地址。除此之外,其他遇到数组名都是指的...
  • Bella_wx
  • Bella_wx
  • 2017-04-23 15:23:11
  • 119

数组相关运算

数组有关运算(sizeof与strlen) 一维数组 int a[] = {1,2,3,4}; printf("%d\n",sizeof(a));//16---a表示整个数组 printf("%d\n...
  • shidantong
  • shidantong
  • 2017-10-16 00:51:30
  • 121

指针和数组的相关运算

一、知识点 数组名代表整个数组的时候只有两种情况: (1)sizeof(数组名) (2)&数组名 二、练习 (1)第一组 int a[] = { 1, 2, 3, 4 ...
  • X_Perseverance
  • X_Perseverance
  • 2018-03-02 11:05:56
  • 18

指针和数组相关运算

我们常用的 sizeof 不是函数,它是以字节为单位来计算不同类型的变量或数组大小的操作符; strlen 是函数,他的参数是 char * 类型的指针,它以 ‘\0’为结束标志求取 char * 类...
  • z_x_m_m_q
  • z_x_m_m_q
  • 2017-12-19 15:45:58
  • 48
收藏助手
不良信息举报
您举报文章:数组的相关运算
举报原因:
原因补充:

(最多只允许输入30个字)