这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
char day[15] = "abcdefghijklmn";
char* strTmp = "opqrstuvwxyz";
printf("&day is %x\n",&day);
printf("&day[0] is %x\n",&day[0]);
printf("day is %x\n",day);
printf("\n&strTmp is %x\n",&strTmp);
printf("&strTmp[0] is %x\n",&strTmp[0]);
printf("strTmp is %x\n",strTmp);
getchar();
return 0;
}
运行后屏幕上得到如下结果:
其实看到结果估计很多东西就好明白了,
先看看前三个输出也就是关于变量day的,在 char day[15] = "abcdefghijklmn"; 这个语句执行的时候,系统就分配了一段长15的内存,并把这段内存起名为day,里面的值为"abcdefghijklmn",如下图所示:
再看程序,第一个输出,&day,&号是地址运算符,也就是day这个变量的内存地址,很明显,在最前面,也就是a字符所在字节的地址;
对于第二个输出也就好理解了,&day[0],就是day数组中第一个变量(也就是a)的地址,因此他们两个是一样的;
第三个输出是day,对于数组变量,可以使用变量名来索引变量中的内容,其实这里的day可以理解成数组变量退化的指针,并且指向数组的开头,既然把它理解成指针,那么它的值肯定是地址了,所以他的值和上面两个也一样。
再看看后面三个输出,关于字符串指针strTmp,在执行char* strTmp = "opqrstuvwxyz";后,内存的图示如下:
如图所示,内存分配了两段内存,一个名为strTmp,类型是一个字符指针,另外一段是一个字符串常量,且strTmp里面存放着字符常量的首地址,注意这里无法通过strTmp修改这段字符串,因为是常量;于是程序中的后面三个输出就好理解了;
&strTmp:strTmp这个字符指针的地址
&strTmp[0]:strTmp所指字符常量第一个字符的地址
strTmp:strTmp这个字符指针的值,即字符常量的首地址
因此,最后两个的值是一样的。
指针可以这样理解,指针这种类型,和int,char,double等等是一样的,只是它用来保存地址值的,而int变量保存整数,char变量保存字符,仅此而已,就char型指针或者int指针,本质是一样的,都是存放的地址,只不过那个地址所里面的变量类型不同而已,还有一种void型指针,就是可以放任何类型变量的地址。
相关推荐
在C语言中,字符数组是存储字符串的基本方式。字符数组的操作是C编程中不可或缺的一部分,因为C语言不提供内置的字符串类型,而是通过字符数组来处理字符串。本篇将深入探讨C语言中字符数组操作的一些关键函数实现,...
本文档在某知名网站下载,要么浏览量最多,要么最新,保证精品,至少为你节约3RMB。格式为caj或者kdh需要专业阅读器打开。
在C语言中,字符串数组和字符串指针是处理字符串的两种常用方法,它们在定义、引用、数据空间、存储单元分配和赋值方面各有特点和区别。 首先,字符串数组是由多个字符型元素构成的集合,它在内存中占据连续的存储...
C语言字符数组与字符串的使用详解 C语言中,字符数组和字符串是两个紧密相关的概念。字符数组是指由多个字符组成的数组,而字符串则是指一个以`\0`结尾的字符序列。在C语言中,字符串可以看作是一个特殊的字符数组...
C语言用指针将字符串数组位置颠倒,实现ABCDEFGHIJKLMNOPQRSTUVWXYZ转换成ZYXWVUTSRQPONNOPQRSTUVWXYZ
"C语言程序设计数组字符串指针PPT学习教案.pptx" 该PPT学习教案主要讲解了C语言程序设计中数组、字符串和指针的概念和使用方法。 数组是C语言中一种重要的数据结构,用于存储一组相同类型的数据元素。数组可以是一...
在第二种表示方法中,字符串指针变量str只是把字符串首地址(即存放字符串的字符数组的首地址)赋给该字符串指针变量。 C语言字符串数组是以字符数组形式存储的字符串,字符串的长度是以`\0`作为结束标志的,可以用...
C语言程序设计数组字符串指针实用教案 一维数组的定义和使用方法 在C语言中,数组是一种构造数据类型,它可以存储多个相同类型的数据元素。数组的定义形式为:类型符 数组名 [常量表达式] ;其中,类型符是基本...
通过以上几点,我们可以看出字符数组和字符指针在C语言中的区别和联系。在实际编程中,应根据需要选择合适的类型,并注意它们在内存中存储和操作的差异。正确地使用字符数组和字符指针,可以帮助我们编写出更高效、...
- 指针可以用来动态内存分配、数组操作、字符串处理以及函数调用。 - 通过指针,可以实现数据结构如链表、树等,以及高级算法如快速排序、二分查找等。 结合“习题+答案”这个文件,你可以通过练习和解答来巩固...
在C语言中,字符串和指针密切相关,字符串常量在内存中是静态分配的,而字符数组可以动态地初始化和修改。字符串指针可以用来遍历字符串,也可以作为函数参数传递,这使得字符串处理更加灵活。 7. **指针和数组的...
在C语言中,字符串是一种...总之,理解和掌握C语言中的字符数组和字符串是编程的基础,包括它们的定义、初始化、表示形式以及处理字符串时如何利用'\0'作为结束标志。这些概念对于编写涉及字符串处理的C程序至关重要。
在C语言中,数组、指针和字符串是基础且重要的概念,它们构成了C语言的核心特性。数组是一系列相同类型变量的集合,可以是一维、二维或多维的。数组的声明通常采用`类型名 数组名[常量表达式]`的形式,例如`int a[10...
C语言中二维数组作为函数参数来传递有三种方法:形参给出第二维的长度、形参声明为指向数组的指针、形参声明为指针的指针。每种方法都有其特点和应用场景,我们需要根据具体情况选择合适的方法。
### C语言字符数组初始化详解 #### 一、字符数组的定义与初始化 在C语言中,字符数组是一种存储字符序列的数据结构,它允许程序员通过数组的形式来存储和操作字符串。字符数组的初始化是指在声明数组时为其分配...
在C语言中,字符串实际上是由字符数组表示的,以空字符`\0`结束。例如,`char str[] = "Hello";`是一个包含6个字符的字符数组,包括结束的`\0`。 通过了解和实践以上知识点,你将能够有效地在C语言中使用数组进行...
【C语言程序设计中的数组、字符串和指针】 在C语言程序设计中,数组是一种重要的数据结构,它允许我们存储一组相同类型的数据。数组的概念在编程中起着基础性的作用,尤其是在处理大量数据时,它提供了高效且方便的...
在C语言中,数组是一种非常基础且重要的数据结构,它是由相同类型的数据元素按照特定顺序组成的集合。...字符串在C语言中实际上是一系列字符的数组,因此,理解数组和指针对于掌握字符串操作至关重要。
【C语言程序设计:数组、指针与字符串】 在C语言中,数组是编程中基本的数据结构之一。数组是由一定数量相同类型的数据元素组成的集合,这些元素在内存中是连续存储的。数组的索引从0开始,表示数组中元素的位置。...
在C语言中,指针和字符数组都是处理字符串的重要工具,但它们之间存在显著的区别。 1. **字符指针与字符数组的区别** - **存储格式**:字符指针(变量)存储的是字符串的首地址,即一个内存地址(通常为2字节)。...