c语言中如何借用指针输出字符串?

如题所述

使用指针输出字符串有以下几种方式:

1、使用printf 函数进行输出,其使用的格式转换符为%s,如 

char *str = "test";//指针指向一个字符串

printf ("%s\n", str);//输出str指向的字符串

2、使用puts函数进行输出,如

char *str = "test";

puts(str);//输出str指向的字符串,会自动多输出一个换行

3、使用自定义函数进行输出,如

void myPuts(char *str)//自定义输出函数

{

if (!str)return ;

while (*str != '\0'){

putchar(*str);

str++;

}

char *str = "test";

myPuts(str);

扩展资料:

C++指针与字符串

1、C语言里没有字符串数据类型,要想获得字符串的表示形式利用字符数组

#include<iostream>

using namespace std;

#include<stdlib.h>

void main()

{

char ar[]={'a','b','c','d'};

cout<<ar;   //字符串后无结束符\0,会有多余打印

cout<<endl;

char br[]={'a','b','c','d','\0'};

cout<<br;

cout<<endl;

char cr[5]="abcd";   //字符串结尾默认隐藏了\0

cout<<cr;

system("PAUSE");

}

2、C语言里没有字符串数据类型,要想获得字符串的表示形式利用字符指针

#include<iostream>

using namespace std;

#include<stdlib.h>

void main()

{

char *p="hello world";

cout<<p;   

//整形的指针,打印指针时只能打印其内部地址

//字符指针,打印指针时也是地址,但是这个被看作字符指针后,会打印该指针指向地址内存放的字符串,打印直到遇到\0为止

system("PAUSE");

}

3、静态常量区的字符串存储及指针访问

#include<iostream>

using namespace std;

#include<stdlib.h>

#include<string.h>

void main()

{

char *p="hello world";   //hello world存放在内存的静态常量区

//指针变量p存储的是该静态常量区的首个字符地址

//不能通过指针修改静态常量区的字符,但是可以通过指针访问

int length=strlen(p);   

//strlen计算的是字符串p的有效长度,不算\0

for(int i=0;i<length;++i)

{

cout<<p[i];

}

system("PAUSE");

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-20

1.*首先是一个算术运算符;

2. 定义一个指针,比方说下面的定义语句:

int a;

定义了一个变量a,其数据类型是int;

再看下面的定义语句:

int *b;

定义了一个int * 变量,怎样理解int*呢?可以这么来:

*b是int型的,它对应一个存储单元,里面可以存放int型数据,而这个单元的地址就存放在b中,此时b就是一个int *的数据. 于是,可以执行下面的操作

a=*b;

但是反过来这样操作就是错误的

b=a;

要用一个int型的变量给int *的变量赋值,则必须使用

b=&a;

讲到这,具有指针类型的形式参数的函数调用方法也就清楚了.

扩展资料:

*p=a的意思是将首元素的地址赋值给指针变量,在声明的时候完成了赋值。

由以上可以看出,p=&a[0],p=a,*p=a 三者的含义是一致的。

数组名a代表的就是数组地址,所以p=&a[0],p=a,二者是等价的。

声明时赋初值:

int *p=&a[0] 和 int *p=a是一致的。

通过指针引用数组元素时:a[1]=*(p+1)。

必须要注意的是:

a:数组首元素的地址(每个元素都是int类型)。

a+2:数组的第3个元素的地址。

* (a+2):数组的第3个元素的地址。

参考资料:百度百科-c语言字符串



本回答被网友采纳
第2个回答  2018-07-13

一、字符指针

1、字符指针输出字符串

为了更好的理解这部分内容,我们先看一个例子:

#include <stdio.h>int main()


{    char *ps ;


ps = "C language!";     /*定义字符指针*/


printf("%s\n", ps);  /*用字符指针PS来输出字符串的内容*/


return 0;

运行结果为: 

这个列子中,字符串“C language!”, 存储在连续的无名存储区中,通过语句ps = "C language!, 将无名储存区的首地址赋给指针ps,也就是说,指针变量ps 指向无名储存区域的首地址,而不是把无名储存区域的内容保存在ps中,

2、字符指针处理字符串

还是从具体的列子出发:

#include <stdio.h>

int main() 

{    

char *ps = "C language!";    

int n = 2;

ps = ps+2;      /*移动指针ps*/      

printf("%s\n", ps);    

return 0;   


}

运行结果: 

这里初始化的时候把首地址赋给了ps , 后面操作ps= ps+2时,ps指向l 所在的空间。

3、字符数组与字符指针处理字符串有何不同

占用空间不同。数组所占空间取决于数组的长度,而指针只占用4字节,用以存放字符串的首地址。

赋值方式不同指针本身是变量,所以可以这样char *ps; ps = "C language!"; 赋值, 而数组不能这样char A[20];A = "C language!;赋值,而要逐个赋值。

二、指针数组

注意不要写成int (*p)[3]; 这是上一篇说的指向数组的指针变量,表示长度为3的指向一维数组的指针变量。

1、指针数组比较适合于用来指向若干个字符串,是字符串处理更加灵活方便。

2、比如图书馆有若干本书,要将这些书名存在一个数组中,一般的方法用二维数组来存,就得定义该字符数组的列数为最长书名的长度,这样就非常浪费空间。

3、用指针数组则可以让指针数组中的各个元素,指向各字符串(书名),这样排序时,不必改动字符串的位置,而是改动指针数组中个元素的指向。

4、这样,各字符串的元素可以不同,而且移动指针变量的值(地址),就比移动字符串所花的时间少得多。

运行结果: 


这段算法,后面部分与一般的数组差不多,但其效率却比较高。

本回答被网友采纳
第3个回答  2018-07-19

可以直接用字符型指针指向一个字符串常量。

为了更好的理解这部分内容,我们先看一个例子:

#include <stdio.h>int main()


{    char *ps ;


ps = "C language!";     /*定义字符指针*/


printf("%s\n", ps);  /*用字符指针PS来输出字符串的内容*/ 


return 0;


}

运行结果为:

这个列子中,字符串“C language!”, 存储在连续的无名存储区中,通过语句ps = "C language!, 将无名储存区的首地址赋给指针ps,也就是说,指针变量ps 指向无名储存区域的首地址,而不是把无名储存区域的内容保存在ps中,

代码截图:

参考资料:百度百科-网页链接

扩展资料:

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。[1] 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。[2] 

在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。

本回答被网友采纳
第4个回答  2018-07-26

举个例子,下图代码.

#include <stdio.h>

int main()
{    char *ps ;
ps = "C language!";     /*定义字符指针*/
printf("%s\n", ps);  /*用字符指针PS来输出字符串的内容*/
return 0;
}

输出为 "C language"

这个列子中,字符串“C language!”, 存储在连续的无名存储区中,通过语句ps = "C language!, 将无名储存区的首地址赋给指针ps,也就是说,指针变量ps 指向无名储存区域的首地址,而不是把无名储存区域的内容保存在ps中,

#include <stdio.h>

int main()
{    char *ps = "C language!";   

int n = 2;

ps = ps+2;      /*移动指针ps*/
printf("%s\n", ps);  

return 0;  
}

这段代码输出结果为 language  

这里初始化的时候把首地址赋给了ps , 后面操作ps= ps+2时,ps指向l 所在的空间。

本回答被网友采纳