Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12402676
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: PHP

2011-08-07 16:13:42

 dyli现在来看看字符数组与字符指针的联系与区别
 
1、请先看下面的代码

关注几点:
(1)、怎样使用字符串给字符数组赋值?
(2)、怎样使用字符串给字符指针赋值?
(3)、字符数组名与字符指针有的区别是?


  1. /* Name : char_array.c
  2.  * Author : dyli
  3.  * Write Date : 20110807,change 20121025
  4.  * Description : Used to distinguish between an array of
  5.                     characters and the string pointer.
  6.  * */

  7. #include <stdio.h>
  8. #define ARRAY_LENGTH 15


  9. int main(int argc, char *argv[])
  10. {

  11.     /* 用字符串给字符数组赋值 */
  12.     char dyli_array[]/*[ARRAY_LENGTH]*/ = "isDyliArray";

  13.     /* 字符串给字符指针赋值 */
  14.     char *dyli_str_pointer = "isDyliStrPointer";


  15.     /*Below you can see,the base Address of the character array can be obtained
  16.      in three:
  17.      1,&+an array name;
  18.      2,&+ the first element of array.
  19.      3,the array name. */

  20.     printf("/*-----------------------------------------------------------------*/\n");
  21.     /* 取数组首地址 */
  22.     printf("&dyli_array 代表数组的首地址%x\n",&dyli_array);
  23.     /* 取首元素的地址 */
  24.     printf("&dyli_array[0] 值也等于数组的首地址%x\n",&dyli_array[0]);


  25.     /* 数组名代表首地址 */
  26.     printf("dyli_array, 数组名同样指向数组的首地址 %x\n",dyli_array);
  27.     printf("dyli_array数组的元素值 = %s,数组的实际长度为 %d\n",
  28.      dyli_array,sizeof(dyli_array));
  29.     printf("dyli_array数组的第一个元素值 = %c\n",dyli_array[0]);
  30.     printf("/*****----------------------------------------------------------****/\n");

  31.     /*Below you can see,the string pointer Variable itselt has an Address. */

  32.     printf("\n字符串指针变量dyli_str_pointer的地址为 %x\n",&dyli_str_pointer);
  33.     printf("用&dyli_str_pointer[0] 取数组第一个元素的地址: %x\n",&dyli_str_pointer[0]);
  34.     printf("dyli_str_pointer变量里面存放的是字符串的首地址 %x\n",dyli_str_pointer);

  35.     printf("dyli_str_pointer所指向的字符串为 %s,且字符串的长度为 %d\n",
  36.      dyli_str_pointer,strlen(dyli_str_pointer));
  37.     printf("使用字符串指针,输出字符串首个元素 %c\n",dyli_str_pointer[0]);
  38.     printf("--------------------------------------------------------------------\n");
  39.     getchar();

  40.     return 0;
  41. }

 

2、运行结果

  1. [root@localhost c]# ./char_array
  2. /*-----------------------------------------------------------------*/
  3. &dyli_array 代表数组的首地址bf8e1fc8
  4. &dyli_array[0] 值也等于数组的首地址bf8e1fc8
  5. dyli_array, 数组名同样指向数组的首地址 bf8e1fc8
  6. dyli_array数组的元素值 = isDyliArray,数组的实际长度为 12
  7. dyli_array数组的第一个元素值 = i
  8. /*****----------------------------------------------------------****/

  9. 字符串指针变量dyli_str_pointer的地址为 bf8e1fc4
  10. &dyli_str_pointer[0] 取数组第一个元素的地址: 8048664
  11. dyli_str_pointer变量里面存放的是字符串的首地址 8048664
  12. dyli_str_pointer所指向的字符串为 isDyliStrPointer,且字符串的长度为 16
  13. 使用字符串指针,输出字符串首个元素 i
  14. --------------------------------------------------------------------




3、再看看这两者在内存里面的怎样分布的
 
(1)、char dyli_array[] = "isDaliArray";
 
 
 
 
 
(2)、char* dyli_str_pointer = "isDyliStrPointer";
 
 
 
 
  dyli_str_pointer这是一个字符指针变量,变量就会有空间,也会有地址。

  这个指针变量地址可以用&dyli_str_pointer来取;它的空间里面存放的是字符串常量的地址,因为该常量的地址已经赋值dyli_str_pointer变量,故可以直接用dyli_str_pointer来取得
 
  而这个dyli_str_pointer所指向的字符串常量的元素,也可以用dyli_str_pointer[0],dyli_str_pointer[1].....dyli_str_pointer[*]号取得!!

4、认清两个本质:

(1)、静态字符数组,占据内存中一段连续的内存;数组都是以\0作为结束标志!

数组名,实则一个常量,故不能拿数组名赋值给数组名,它的值为连续内存的首地址;这个地址也是数组第一个元素的地址。

(2)、字符串,同样占据内存中一段连续的内存;

字符指针,是一个变量,其大小的4个字节,用来存放字符串占据的连续内存的首地址;另外,字符指针它本身也就地址!

 
 
阅读(2609) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~