我是靠谱客的博主 玩命百褶裙,最近开发中收集的这篇文章主要介绍a与&a,数组与指针的恩恩怨怨,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include "stdafx.h"
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{
char a[12] = {'A','B','C','D','E','F','G','H',''};
char * p = a;
printf("The content of a    %sn", a);
printf("The content of &a    %sn", &a);
printf("The content of p    %sn", p);
printf("**************************************************n");
printf("The value of a     %xn", a);
printf("The value of &a     %xn", &a);
printf("The value of p     %xn", p);
printf("**************************************************n");
printf("%cn", *(a));
printf("%cn", a[1]);
printf("**************************************************n");
printf("%dn", sizeof(a));
printf("%dn", sizeof(&a));
printf("%dn", sizeof(p));
printf("%dn", sizeof(*p));
printf("**************************************************n");
char (*q)[12] = &a;
char (*i) = a;           //类型一致,OK。左边为“char *”,右边也为“char *”
//char (*q) = &a;       //error C2440: “初始化”: 无法从“char (*)[12]”转换为“char *”
//char (*q)[12] = a;   //error C2440: “初始化”: 无法从“char [12]”转换为“char (*)[12]
i = a + 1;
q = &a +1;
printf("%sn", i);
printf("%sn", q);
getch();
return 0;
}


上图,有图有真相!


图1(最终输出结果)

 

 

 

 

 

 

 

 


图2(a与&a的区别)


图3 ((i=a+1)、(q=&a+1)之前)



图4:((i=a+1)、(q=&a+1)之后))

 

总结
1.a、&a、p都指向数组首元素的首地址,这点可以从输出他们的值是一样的看出。

2.指针和数组的2种访问形式:以指针的形式访问和以下标的形式访问数组(以指针的形式访问和以下标的形式访问指针)。

3.数值名a有2层含义:a.作为数组名,代表数组,类型为char [12](图1);b.作为数组首元素的首地址(a+1,跨度为数组元素的类型的长度),类型为char *。(从图1和图2的对比可以看出)

4.&a的类型为char [12]*,代表整个数组(&a+1,跨度为整个数组的长度)。(从图1和图2的对比可以看出)

5.i和q的输出结果的说明:i在字符'H'后即是'',所以输出结束;q数组越界,所以乱码。

6.对"图1"的说明:sizeof(*p),p的声明是"char * p",p所指向的内容是一个字符(即p[0]),所以sizeof(*p)当然是1了。&a的类型为char[12]*,是一指针,长度当然为4。

 

原文地址:http://hi.baidu.com/ati_crossfire/blog/item/96451bdc89d316395882dd68.html

转载于:https://blog.51cto.com/daisy8867/561443

最后

以上就是玩命百褶裙为你收集整理的a与&a,数组与指针的恩恩怨怨的全部内容,希望文章能够帮你解决a与&a,数组与指针的恩恩怨怨所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部