数组名与指针变量
2016-05-03 10:27
148 查看
今天偶然间看到一个问题,于是乎去学习了下,记录一下对数组名的一个知识点。
数组名:是指针常量。
出错代码:
int aa[10] = {0};
int num = 0;
for(num = 0; num < 10; num ++)
{
aa[num] = num;
}
int *bb = (int *)malloc(40);
memset((void *)bb, 0, 40);
for(num = 0; num < 10; num ++)
{
printf("%d\n",aa[0]);
++aa;
}
编译就无法通过:error: lvalue required as increment operand
正确代码:
for(num = 0; num < 10; num ++)
{
printf("%d\n",bb[0]);
++bb;
}
原因:aa 数组名是指针常量,不可以进行自加运算。
延伸拓展:
(1) 数组名表示的就是一种数据结构,就是数组;
(2) 数组名可以转换成一个指针常量;
(3) 指向数组的指针则是指针变量,存放着的是数组的地址!
下面又出现一个问题:
void arrayTest(char str[])
{
printf("%d\n",sizeof(str));
}
int main()
{
char str1[10] = "I Love U";
arrayTest(str1);
return 0;
}
打印结果为4(32位系统)/8(64位系统)。
原因分析 :当数组名作为形参传入时候,只是一个指针变量了,可以做自增、自减操作。
形参char str[]等同于char *str
补充说明:对于一个指针来说,char *aa = (char *)malloc(10);
以下运算合法,与aa是不是数组无关。
*(aa + n) = aa
; (n < 10)
还有一点需要说明:
对于上面例子中的bb指针来说,不需要做free(bb)操作,因为aa在结束时候会被干掉,bb要是free的话会造成二次free,这样就报错了。
数组名:是指针常量。
出错代码:
int aa[10] = {0};
int num = 0;
for(num = 0; num < 10; num ++)
{
aa[num] = num;
}
int *bb = (int *)malloc(40);
memset((void *)bb, 0, 40);
for(num = 0; num < 10; num ++)
{
printf("%d\n",aa[0]);
++aa;
}
编译就无法通过:error: lvalue required as increment operand
正确代码:
for(num = 0; num < 10; num ++)
{
printf("%d\n",bb[0]);
++bb;
}
原因:aa 数组名是指针常量,不可以进行自加运算。
延伸拓展:
(1) 数组名表示的就是一种数据结构,就是数组;
(2) 数组名可以转换成一个指针常量;
(3) 指向数组的指针则是指针变量,存放着的是数组的地址!
下面又出现一个问题:
void arrayTest(char str[])
{
printf("%d\n",sizeof(str));
}
int main()
{
char str1[10] = "I Love U";
arrayTest(str1);
return 0;
}
打印结果为4(32位系统)/8(64位系统)。
原因分析 :当数组名作为形参传入时候,只是一个指针变量了,可以做自增、自减操作。
形参char str[]等同于char *str
补充说明:对于一个指针来说,char *aa = (char *)malloc(10);
以下运算合法,与aa是不是数组无关。
*(aa + n) = aa
; (n < 10)
还有一点需要说明:
对于上面例子中的bb指针来说,不需要做free(bb)操作,因为aa在结束时候会被干掉,bb要是free的话会造成二次free,这样就报错了。
相关文章推荐
- String,StringBuffer与StringBuilder的区别??
- Swift--存储属性-备
- Android 自定义一个轮播图
- oracle 不同表空间的数据迁移
- 4月末.xyz域名总量12强:新网负增长 跌至第十二名
- 正则表达式基础知识
- Java里子类调用父类构造方法问题
- 基于HTML5的有弹幕功能的视频播放器
- 访问限制
- Android短信验证(手机号注册,绑定手机号获取验证码)实例
- CALayer精讲(转)
- C语言typedef标识符
- perl 5.22手动安装Mysql DBI和DBD
- HDU 5675 ztr loves math(技巧枚举)
- Android 在ListView嵌套GridView中出现的点击事件冲突的处理以及gridview显示不全的问题
- 非原子性操作
- Webservice接口数据抽取_Kettel<二>
- linux 系统运行级别(转)
- perl 5.22手动安装Mysql DBI和DBD
- perl 5.22手动安装Mysql DBI和DBD