字符数组与字符指针初探

简介:  dyli现在来看看字符数组与字符指针的联系与区别   1、请先看下面的代码关注几点:(1)、怎样使用字符串给字符数组赋值?(2)、怎样使用字符串给字符指针赋值?(3)、字符数组名与字符指针有的区别是? /* Name : char_array.
 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";
 
 
img_017218fe78afe51197f628353fa189be.jpg
 
 
 
(2)、char* dyli_str_pointer = "isDyliStrPointer";
 
 
img_bb61e8707149d0b535a7cce4a1047fb1.jpg
 
 
  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个字节,用来存放字符串占据的连续内存的首地址;另外,字符指针它本身也就地址!

 
 
相关文章
|
3天前
|
存储 C语言
字符指针作为函数参数
字符指针作为函数参数
20 2
|
3天前
|
存储 C语言
字符指针变量与字符数组的比较
字符指针变量与字符数组的比较
14 3
|
3天前
|
存储 C语言
指针数组作为main函数的形参
指针数组作为main函数的形参
4 0
|
3天前
|
存储 C语言 索引
指向结构体数组的指针
指向结构体数组的指针
8 0
|
3天前
|
C语言
在引用数组元素时指针的运算
在引用数组元素时指针的运算
9 0
|
3天前
|
C语言
通过指针引用数组元素
通过指针引用数组元素
8 0
|
3天前
|
存储 C语言
数组元素的指针
数组元素的指针
7 0
|
3天前
|
存储 C语言
什么是指针数组
什么是指针数组
9 0
|
5天前
|
存储 编译器 C语言
数组指针,高效编程之道
数组指针,高效编程之道
|
5天前
|
存储 安全 编译器
C语言指针与数组
C语言指针与数组
10 0