有关数组的运算:sizeof()和strlen()
来源:互联网 发布:山海经图鉴软件 编辑:程序博客网 时间:2024/05/17 09:11
有关数组的运算:
首先我们分析一下sizeof()和strlen();
sizeof()功能:计算数据空间的字节数
当数组名单独放进sizeof()里表示整个数组。
strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。
1.一位数组的计算
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){int a[] = {1,2,3,4}; //一位数组printf("%d\n",sizeof(a)); // 16 a表示整个数组printf("%d\n",sizeof(a+0)); // 4 a+0 表示数组首元素地址,int型占4个字节printf("%d\n",sizeof(*a)); // 4 *a 表示数组首元素, 1 int型printf("%d\n",sizeof(a+1)); // 4 a+1 表示数组第二个元素的地址printf("%d\n",sizeof(a[1])); // 4 a[1]表示数组的第二个元素printf("%d\n",sizeof(&a)); // 4 a表示整个数组,&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表示第二个元素地址 return 0;}
2.字符数组的计算:
注释:strlen()会默认()内为一个地址,从此地址开始找字符,直到找到’\0‘,就停止
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include <string.h>int main(){char arr[] = {'a', 'b', 'c', 'd', 'e', 'f',};printf("%d\n",sizeof(arr)); // 6 arr 表示整个数组,char型一个字节,6个元素printf("%d\n",sizeof(arr+0)); // 4 arr+1 表示数组第二个元素的地址printf("%d\n",sizeof(*arr)); // 1 *arr 表示第一个元素,char型printf("%d\n",sizeof(arr[1])); // 1 arr[1] 表示第一个元素,char型printf("%d\n",sizeof(&arr)); // 4 数组地址的地址(与数组首元素地址相同,但含义不同)printf("%d\n",sizeof(&arr+1)); // 4 数组地址的下一个地址printf("%d\n",sizeof(&arr[0]+1)); // 4 数组第二个元素的地址printf("%d\n",strlen(arr)); // X arr表示素组,但strlen需要有'\0'才能停下来printf("%d\n",strlen(arr+0)); // X arr+1表示数组首地址,同上// printf("%d\n",strlen(*arr)); // strlen 是从地址开始的地方查找字符,知道找到'\0'//printf("%d\n",strlen(arr[1])); printf("%d\n",strlen(&arr)); // X &arr表示数组的地址printf("%d\n",strlen(&arr+1)); // X &arr表示数组后的地址printf("%d\n",strlen(&arr[0]+1)); // X &arr[0]+1 数组的第二个元素return 0;}
3. 指针型数组:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include <string.h>int main(){char *p = "abcdef";printf("%d\n",sizeof(p)); // 4 p表示数组首元素的地址printf("%d\n",sizeof(p+1)); // 4 p+1表示数组第二个元素的地址printf("%d\n",sizeof(*p)); // 1 *p表示数组首元素printf("%d\n",sizeof(p[0])); // 1 p[0]表示数组首元素printf("%d\n",sizeof(&p)); // 4 &p表示数组首元素地址的地址printf("%d\n",sizeof(&p+1)); // 4 &p表示数组首元素地址的下一个地址printf("%d\n",sizeof(&p[0]+1)); // 4 &p[0]+1表示数组第二个元素地址printf("%d\n",strlen(p)); // 6 p表示数组首元素地址,从此开始查找到第七个元素碰到了'\0'结束减1printf("%d\n",strlen(p+1)); // 5 p+1表示数组第二个元素地址,从此处开始查找//printf("%d\n",strlen(*p)); // *p表示第一个元素。//printf("%d\n",strlen(p[0])); // p[0]表示第一个元素 //printf("%d\n",strlen(&p)); // &p表示数组首元素地址的地址 // printf("%d\n",strlen(&p+1)); // X &p表示数组首元素地址的下一个地址printf("%d\n",strlen(&p[0]+1)); // 5 &p[0]+1表示数组第二个元素地址return 0;}
4. 二维数组:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){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表示二维数组的第一行地址第二个元素的地址(&a[0]表示第一行地址)printf("%d\n",sizeof(*a)); // 16 *a 表示数组的第一行元素 printf("%d\n",sizeof(a[3])); // 16 a[3]表示数组的第三行元素return 0;}
结论:数组名代表整个数组只有两种情况:
1. 数组名单独放在sizeof()中.
2. &数组名,这里数组名表示整个数组,而”&数组名“表示整个数组的地址与数组首元素地址值相同但含义不同
例: int arr[10] = {0};
其中:假设:&arr和&arr[0]值上都等于0x00000000
但: &arr+1 = 0x00000028
而&arr[0]+1 = 0x00000004
2 0
- 有关数组的运算:sizeof()和strlen()
- 数组的sizeof和strlen
- 数组相关的运算(sizeof,strlen)
- 有关 sizeof和strlen的总结
- 有关 sizeof和strlen() size()的总结
- 有关 sizeof和strlen的总结
- 一维数组和二维数组的运算(sizeof与strlen的区别)
- 数组的相关运算(sizeof和strlen的灵活应用)
- C语言中 数组的运算及sizeof()和strlen()操作符的简单介绍
- 关于sizeof和strlen在一维数组的一些运算
- 有关 sizeof和strlen的总结[原创,总结]
- 有关 sizeof和strlen的总结[原创,总结]
- 数组中的strlen和sizeof
- 指针的相关运算,包括一维数组、二维数组、字符数组的sizeof、strlen运算
- sizeof运算符和strlen函数的区别
- 数组的计算 sizeof strlen
- 数组和指针有关sizeof的题目
- sizeof和strlen的区别,数组和指针的区别
- 【 设计模式学习】单例模式
- UVa1339
- 使用theano写mini-batch训练的BiLSTM
- UVa133
- Java NIO:浅析I/O模型
- 有关数组的运算:sizeof()和strlen()
- Google Guava官方教程(中文版)(待学习内容)
- shell内置在其源代码中的命令
- cf Babaei and Birthday Cake(树状数组解决LIS问题)
- UVa815
- 23种设计模式13---观察者模式
- UVa1589
- 26:滑雪
- :nth-of-type(n)父类中选择元素的第几个 :nth-child(n) 选择某个元素且是父类的第几个元素