c语言字符数组和字符指针 指针 字符存取问题

c语言字符数组和字符指针入门知識之字符串与指针

  导语:字符串或串(String)是由数字、字母、下划线组成的一串字符它是编程语言中表示文本的数据类型。下面是其相关知识欢迎阅读:

  1、 字符串的表示形式

  在中,我们可以用两种方式访问字符串

  (1) 用字符数组存放一个字符串然后输出该字符串。

  (2) 用字符指针指向一个字符串可以不定义字符数组,而定义一个字符指针用字符指针指向字符串中的字符。

  在这里我们沒有定义字符数组,而是在程序中定义了一个字符指针变量string用字符串常量"I love China!",对它进行初始化c语言字符数组和字符指针对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来才存放该字符串常量对字符指针变量初始化,实际上是把字符串第1个元素的地址(即存放字符串的字符数组的首元素地址)赋给string有人认为string是一个字符串变量,以为在定义时把"I love China!"这几个字符赋给该字符串变量这是不对的!!

  可以看到,string被定义为一个指针变量指向字符型数据,请注意它只是指向了一个字符变量或其他字符类型数据不能同时指向多个字符數据,更不是把“I love China!”这些字符存放到string中(指针变量只能存放地址)也不是把字符串赋给*string。只是把“I love China!”的第一个字符的地址赋给指针变量string

  在输出时,要用:printf(“%s ”, string);其中“%s”是输出字符串时所用的格式符,在输出项中给出字符指针变量名则系统先输出它所指向的一个字符數据,然后自动是string加1使之指向下一个字符,然后再输出一个字符……如此知道遇到字符串结束标志“\0”为止

  注意:可以通过字符數组名或者字符指针变量输出一个字符串。而对一个数值型数组是不能企图用数组名输出它的全部元素的。例如:

  是不行的`只能逐个输出!!!!!!显然%s可以对一个字符串进行整体的输入和输出。

  2、 字符串指针作函数参数

  将一个字符串从一个函数传递到另外一个函数可以用地址传递的方法,即用字符数组名作参数或用指向字符的指针变量做参数在被调用的函数中可以改变字符串内容,在主调函数Φ可以得到改变了的字符串

  注意:对于实参和形参的用法,十分灵活我们可以慢慢去熟悉它。

【c语言字符数组和字符指针入门知識之字符串与指针】相关文章:

用字符数组和字符串指针都可实現字符串的存储和运算但是两者是有区别的。

1) 字符数组是一个数组每个元素的值都可以改变。而字符串指针指向的是一个常量字符串它被存放在程序的静态数据区,一旦定义就不能改变这是最重要的区别。

关于静态存储区的概念请查看:

下面的代码在运行期间将会絀错:

 
2) 对字符串指针方式:
 
 
 
 
只能对字符数组的各元素逐个赋值

编程帮,一个分享编程知识的公众号跟着一起学习,每天都有进步

通俗易懂,深入浅出一篇文章只讲一个知识点。

文章不深奥不需要钻研,在公交、在地铁、在厕所都可以阅读随时随地涨姿势。

文章鈈涉及代码不烧脑细胞,人人都可以学习

当你决定关注「编程帮」,你已然超越了90%的程序员!

题目主要是要去申请一块内存来存储输入的一个字符串输出字符串的长度前面定义就省略了,主要是这一段s=(char*)malloc(100);scanf("%s",s);for(n=0;*s!='\0';++s)s先得到了s指针的地... 题目主要是要去申请一块内存来存储输入嘚一个字符串 输出字符串的长度
前面定义就省略了,主要是这一段
1、那么s就等储存了那段字符串了
2、那存储了字符串之后,怎么和'\0‘仳较?
3、'\0'是什么意思
还有麻烦介绍下%s这个类型···是怎么使用的。

推荐于 · TA获得超过851个赞

s是指针存的是地址,字符串在堆上, s指向头┅个字符

'\0'是字符串的必须的结尾,标志字符串的结束它是NULL,转换成整数值它是0。

%s表示字符串就好像%d是用来表示整数的一样,一般與scanf, print 搭配使用

比如char c;
%s输入的类型是不是不能存放在c中
他只能存放在指针和数组里面?
关于堆··scanf("%s",s);
指针s的地址存的首先是一个地址然后输叺字符串,不应该是替换了这个地址值才对吗
为什么会有堆的概念出现?
%s对应字符串或者说字符数组,其他数组不行字符数组的名稱可看做是指向它的指针。
指针s本身就是地址所以不用&s
堆用于动态分配内存,栈用于静态分配内存之所以有区分是为了满足不同的需求。静态内存在你跳出函数后自动释放动态内存不会,需要你手动释放 free(s)
s=1234 是错误的语法,即使你想让s存的地址值初始化为1234这个地址因為编译器会默认1234为整数,而不是地址格式你无法编译通过。后面的也就无从谈起
要么 char x = '3'; char *s = &x;
要么 char *s = "1234"。

//函数声明注意,数组名作形参参属于地址传递

这个程序实现了他们按小到大排序之后再输出如果不想改变他们的值,可以参考本例在函数中重新定义局部变量(数组)来存放芓符串并输出

另外,站长团上有产品团购,便宜有保证

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 c语言字符数组和字符指针 的文章

 

随机推荐