C语言中为什么可以通过字符数组首址或指向字符串的指针来输出其全部数组或字符串。
如:
char a1[20]={'h','a','h','a'};
char* a2="hehe";
cout<
而:
int a3[20]={1,2,3,4};
cout<
下面我们来分析其中原因:
1.这是因为C语言本身在发现是char类型指针的时侯,"会输出指针指向的数据的值,而不会按照一般情况输出指针本身的值",然后再把地址+1,再输出其指向的数据的值,直到遇到'\0'结束;
2.我们知道字符串的最后都有一个'\0'符号做为结束符,这对输出一串字符是很必要的,那字符数组是怎么做到这一点的呢:
一个数组不论是否所有元素被初始化,只要被初始化,所有元素就被初始化。如(非静态变量情况下):
int a[10]={4,5};其余就为0。如果是char类型,初始化时如果只对部分元素初始化,其余的部分就自动定为'\0';
所以只要不是这种情况的初始化:char a[4]="hehe".被初始化过的字符数组都会有'\0'结束符。
在理解了上面的说明后,来看下面的一个情况:
1.先这样写
char aa='d';
cout<<&aa<第一种情况输出的结果是从d开始的乱码,因为C语言会那字符指针以输出字符数组的方式来处理。
第二种情况输出的是d。
2.现在我们这样来写:
char aa='d';*(&aa+1)='\0';//这样写其实是错的,因为&aa+1是未定义的地址空间。
cout<<&aa<输出的竟然都是d。其结果就是由于C语言对字符指针的处理方式造成的。
--------------------next---------------------
阅读(1137) | 评论(0) | 转发(0) |