指针和数组相关运算
来源:互联网 发布:java开源社区 编辑:程序博客网 时间:2024/05/17 15:06
我们常用的 sizeof 不是函数,它是以字节为单位来计算不同类型的变量或数组大小的操作符; strlen 是函数,他的参数是 char * 类型的指针,它以 ‘\0’为结束标志求取 char * 类型的指针指向的对象到 ‘\0’ 之间元素所占的字节数。理解这些题目分析清楚“()“里面的内容代表的含义是关键。当我们理解二维数组时大胆的将它理解成一维数组 例如二维数组:int = a[3][4] = {0};可理解为 int a[] = {a[0],a[1],a[2]};只是这里一维数组的每个元素占 16 个字节,其他的完全可以按一维数组的理解方式去理解。这里我们不得不说说数组和指针的关系,虽然在某些情况下使用很类似,但他们二者的关系是没有关系,哈哈哈。以下题目的用算结果已做了验证。
//一维数组int a[] = {1,2,3,4};printf("%d\n",sizeof(a)); //16printf("%d\n",sizeof(a+0)); //4printf("%d\n",sizeof(*a)); //4printf("%d\n",sizeof(a+1)); //4printf("%d\n",sizeof(a[1])); //4printf("%d\n",sizeof(&a)); //4printf("%d\n",sizeof(&a+1)); //4printf("%d\n",sizeof(&a[0])); //4printf("%d\n",sizeof(&a[0]+1));//4//字符数组char arr[] = {'a','b','c','d','e','f'};printf("%d\n",sizeof(arr)); //6printf("%d\n",sizeof(arr+0)); //4printf("%d\n",sizeof(*arr)); //1printf("%d\n",sizeof(arr[1])); //1printf("%d\n",sizeof(&arr)); //4printf("%d\n",sizeof(&arr+1)); //4printf("%d\n",sizeof(&arr[0]+1));//4printf("%d\n",strlen(arr)); //随机数 假设19printf("%d\n",strlen(arr+0)); //19printf("%d\n",strlen(*arr)); //errorprintf("%d\n",strlen(arr[1])); //errorprintf("%d\n",strlen(&arr)); //19printf("%d\n",strlen(&arr+1)); //13printf("%d\n",strlen(&arr[0]+1));//18char *p = "abcdef";printf("%d\n",sizeof(p)); //4printf("%d\n",sizeof(p+1)); //4printf("%d\n",sizeof(*p)); //1printf("%d\n",sizeof(p[0])); //1printf("%d\n",sizeof(&p)); //4printf("%d\n",sizeof(&p+1)); //4printf("%d\n",sizeof(&p[0]+1));//4printf("%d\n",strlen(p)); //6printf("%d\n",strlen(p+1)); //5printf("%d\n",strlen(*p)); //errorprintf("%d\n",strlen(p[0])); //errorprintf("%d\n",strlen(&p)); //随机数printf("%d\n",strlen(&p+1)); //随机数printf("%d\n",strlen(&p[0]+1));//5//二维数组int a[3][4] = {0}; //a[3][4] = {a[0],a[1],a[2]};printf("%d\n",sizeof(a)); //48printf("%d\n",sizeof(a+1)); //4printf("%d\n",sizeof(a[0][0]));//4printf("%d\n",sizeof(a[0])); //16printf("%d\n",sizeof(&a[0]+1));//4printf("%d\n",sizeof(*a)); //16printf("%d\n",sizeof(a[3])); //16
注:只有两种情况下数组名代表整个数组:(1) sizeof(数组名),这里的数组名代表整个数组 (2) &数组名,这里的数组名代表整个数组。
阅读全文
0 0
- 指针和数组相关运算
- 数组和指针相关
- 数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”
- 二十七、数组、指针和字符串:指针变量的声明、地址相关运算
- 二维数组和指针运算
- 对于数组和指针运算
- C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- 数组、指针和字符串:指针的赋值和指针运算
- 从运算符优先级看指针数组和数组指针
- 指针的相关运算,包括一维数组、二维数组、字符数组的sizeof、strlen运算
- 使用数组名和指针运算
- 指针和多维数组:数组名是包含两个int的数组的地址、指针加1的不同结果、地址取值的相关运算
- 10.13-3 指针与一维数组相关运算
- 指针数组和数组指针及相关概念
- 数组和指针相关(1)
- C数组和指针相关的问题
- C++二维指针和指针数组的相关介绍
- 指针、数组 运算。
- 仿格瓦拉生活注册界面验证码滑动效果
- 一致性Hash算法
- 写给自己的JAVA工程师之路-基础类库
- jQuery学习笔记
- Python建立本地服务器
- 指针和数组相关运算
- valueOf()方法
- JavaWeb自主学习--css(一),day2
- Linux多线程之基本编程
- [Spark--PairRDDFunctions]--combineByKey的解释
- 安装paramiko时遇到error in cryptography setup command: Invalid environment marker: python_version < '3'
- QString 中不要出现括号什么的乱七八糟符号,compare时会不等
- 我所理解的生成器(关键词:生成器对象/生成器/生成器表达式/生成器函数/生成器类/generator/yield/__iter__)
- siebel escript入门——基础知识一