字符数组与字符指针初探

简介:  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个字节,用来存放字符串占据的连续内存的首地址;另外,字符指针它本身也就地址!

 
 
相关文章
|
1月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
36 3
|
19天前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
23天前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
23天前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
23天前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
26天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
49 4
|
1月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
43 2
|
1月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
39 1
|
2月前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
2月前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。