字符串数组指针和指针数组的区别_c语言定义一个字符串数组

字符串数组指针和指针数组的区别_c语言定义一个字符串数组C语言指针的使用、字符串和指针详解(详细、易懂)C语言指针笔记刚开始了解指针是从交换两个变量开始,但是总是断断续续地学,每次都在看交换两个变量的函数,上周在课上正式学了指针&#

C语言指针的使用、字符串和指针详解(详细、易懂)   C语言指针笔记   刚开始了解指针是从交换两个变量开始,但是总是断断续续地学,每次都在看交换两个变量的函数,上周在课上正式学了指针,看的时候感觉懂了,但是一上机就不知道指针怎么用、参数怎么传。于是想整理一下指针的学习笔记,再去做实验。   文中有错别字或其他错误的话记得给我留言哦~   什么是指针?怎么定义?   指针是一个变量,其值为另一个变量的地址,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。定义指针的一般类型为:   指针变量声明的例子:   其中,定义变量px是一个指针,且是指向整型变量的指针变量;q是指向单精度型变量的指针变量。   怎么使用指针变量?   指针变量跟其他变量一样,若要引用,则先要初始化或赋值。与指针有关的运算符有两个: &—取地址运算符*指针运算符   刚学指针的时候对这两个运算符很蒙,不知道该用哪个,怎么用。刚开始学不用搞那么复杂,举个简单的例子:   结果是:   10 10 000000CB5D3FF654 000000CB5D3FF654   因为变量的地址是系统随机分配的,故每次运行地址都不一样,但是输出&a和p是一个效果。a是一个普通变量,应该在前面加个”&“才能取到a的地址,而p是一个指针变量,它存的就是a的地址,故前面不用取地址符”&”。   对于取值还是取地址,为了方便记忆与理解,我是这样记的:   仅仅一个p的话,它的值就是a的地址,*p的话就是取到a的值10。   指针和数组的关系是什么?   假设程序中有以下语句:   假设程序中有以下语句:   这里先把a[2]看成一个普通变量而不是数组,由上面的讲解假设程序中有以下语句:   这里先把看成一个普通变量而不是数组就好理解了。   C语言规定数组名代表数组首地址,即数组第一个素的地址,一下两个语句是等价的:   注意:在程序运行过程中,一个数组所占用的存储区是不变的,因此数组名是一个常量,故只能引用数组名,而不能对其进行赋值。 如是非法的。通过数组名取地址前面不用”&”,因为数组名本身就是一个地址,而通过素取地址的话前面就要加”&”。   a是常量,a++是非法的,但p是指针变量,p++是合法的。   p1+i ——表示&a[k+i],即a[k+i]的地址   p1-i ——表示&a[k-i],即a[k-i]的地址   p1-p2 ——表示k-1,即a[k]与a[1]之间相隔的素个数   如何通过指针存取数组素?   已知数组名就是数组中第一个素的地址,以下两个语句是等价的:   那么如何通过指针存取数组中其他素呢?   C语言约定如果一个指针p指向a[i],则p+1指向a[i+1],因此以下两个语句是等价的:   注意:”“的优先级比”“高,””中的括号是不可省略的,表示先取第一个素的值,再加1。   字符串和指针   我们先来看一段代码:   运行结果为:   abcde,a,bcde,b   abcde,a,bcde,b   注意输出一个字符和输出字符串的区别。   当用指针时,如s1,s1+1,s2等表示一个字符串,该字符串从指针所指字符开始直至字符串结束标志’0’;而当用等时,表示的是一个字符,即指针所指的字符或位于该下标的字符素。由此可见,字符数组和字符指针在使用上是相似的。但是两者又是有区别的:   字符指针   字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以 0 作为串的结束。   顺序是:   1.分配内存给字符指针;   2.分配内存给字符串;   3.将字符串首地址赋值给字符指针;   这里有两点需要考虑清楚的地方:   1.*a只是指向一个字符   运行结果:   b c bcd   2.若字符串常量出现在表达式中,代表的值为该字符串常量的第一个字符的地址。所以”hello”仅仅代表的是其地址。原声明方式相当于一下声明方式:   字符数组   字符数组是由若干个数组素组成的,它可用来存放整个字符串(即用字符数组来存放字符串)。在C语言中,将字符串作为字符数组来处理(c++中不是)。   (1)可以用字符串常量来初始化字符数组:   也可以省略花括号:   注意:上述这种字符数组的整体赋值只能出现在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其素一一赋值。   下面的赋值方法是错误的:   在C语言中,可以用两种方法表示和存放字符串:   两种表示方式的字符串输出都用:printf(“%s”,a);   %s表示输出一个字符串,给出字符指针变量a(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符,然后使a自动加1,使之指向下一个字符,纸到遇到字符串结束标志符0。   字符串指针   可以赋值:   也就是说每个素都是string类型的,跟char是不一样的,不过string可以用char来代替:   (字符串)指针数组   实例:   或者:   结果:   Hello ello o   表示哦a是数组,数组中的素是指针,指向char类型,(数组里面所有的素是连续的内存存放的),数组名是数组第一个字节的内存地址,并且数组名a也表示指针。所以a并不表示a地址存储的内容,而是a地址本身。   表示a的第二个素的内存地址,所以是加8字节。(因为a的素是char指针,所需要的空间为8字节(64位))   :表示a这个数组的第二个素的内容(是个char类型的指针,本例表示world字符串的地址)   :表示a这个数组的第二个素的内容(char指针)所指向的内容(w字符)   :表示限定这个数组最多可存放10个素(char指针),也就是说这个数组占用10*8=80个字节 a+1=>*(a+1)=>*(a+1)[0]指针(地址)指针内容(字符串)字符   C语言有两种表示字符串的方法,一种是字符数组,另一种是字符串常量,它们在内存中的存储位置不同,使得字符数组可以读取和修改,而字符串常量只能读取不能修改。   参考:[1]C++ 字符、字符串、字符数组、字符串指针、指针数组      [2]C语言中文网-C语言指针

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/20574.html

(0)
上一篇 2024年 9月 15日 下午5:06
下一篇 2024年 9月 15日

相关推荐

关注微信