根据一段代码理清一些变量,常量,数组,指针的关系及理解

来源:互联网 发布:java中webservice实例 编辑:程序博客网 时间:2024/05/16 06:49

#include<stdio.h>
int main(void)
{
char a[]="hello";
char *bPtr;
char b[]="good bye!";
bPtr=b;
printf("%d\t%s\n\n",sizeof(a),a);


printf("%d\t%p\n",sizeof(&b),&b);
printf("%d\t%d\t%c\n",sizeof(*b),*b,*b);
printf("%d\t%s\n\n",sizeof(b),b);

printf("%d\t%p\n",sizeof(&bPtr),&bPtr);
printf("%d\t%d\t%c\n",sizeof(*bPtr),*bPtr,*bPtr);
printf("%d\t%p\n",sizeof(bPtr),bPtr);


return 0;
}


根据以上自己编写的代码理解以下几点:

1.字符和字符串是不同的,printf("%d\t%d\t%c\n",sizeof(*b),*b,*b); 这行如果写成printf("%d\t%d\t%s\n",sizeof(*b),*b,*b)是错误的。字符转义符是“%c”,字符串转义符是“%s”,两者有本质的区别。

2.单个字符在计算机内存中是用ascii编码存储的,每个字符对应一个整数。

3.字符串是一个数组,数组的标识符代表了这个数组或是代表了指向数组第一个存贮单元的指针。即&b=“g”的存储地址,单独用b的时候b是一个数组,前面加上*或&,这时候b当成一个指针在用。

4.*b是对b指针指向的内存空间进行解引用,返回值是数组b[]的第一个存储单元的内容,即*b是“g”,但g在内存中是按ascii编码存储,是一个小的整数。可以把这个存储内容打印出来,通过不同的转义符打印出来的是不同的内容,例如通过“%c”则打印“g”,通过“%d”则打印“103”。


printf("%c\n",103); 打印出来就是”g“。编译器把103默认为常量。

printf("%d\n",103);打印出来是”103“


printf("%d\n",g); 是不可以的,因为编译器会把g默认为变量,而这个变量未声明,无法识别。

printf("%d\n",‘g’);是可以的。 printf("%c\n",‘g’);是可以的

0 0
原创粉丝点击