字符指针变量和字符数组的区别
发布网友
发布时间:2022-04-23 05:48
我来回答
共4个回答
热心网友
时间:2022-04-09 17:51
简单说一下:
字符(非字符串数组,字符数组和字符串数组是有区别的,字符串数组每个元素都是一个字符串)数组是用来存放字符的数组,在内存中占一段连续的单元。所占内存存放的是字符串。定义方法为:char a[N];N为常量表达式,可初始化。字符指针是指向字符的指针,所占内存单元存放的是所指字符的内存单元。定义方法为:char *p;
完整的解答:
1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的地址(字符串第一个字符的地址),决不是将字符串放到字符指针变量中
2)赋值方式
对于字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值:
char str[14];
str = "I love you!";
而对于字符指针变量,可采用如下赋值:
char *a;
a = "I love you!";
赋值给a的是字符串第一个元素的地址
3)对字符指针赋初值
char *a = "I love you!";
等价于
char *a;
a = "I love you!";
而对数组的初始化:
char str[14] = {"I love you!"};
不等价于
char str[14];
str = "I love you!";
4)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址
char *a, str[10];
a = str;
scanf("%s", a);
先使a有确定值,即使a指向一个数组的首元素,然后输入一个字符串,把它存放在以该地址开始的若干单元中
5)指针变量的值是可以改变的,而数组名是常量
6)用指针变量指向一个格式字符串,可以用它代替printf函数的格式字符串
char * format;
fomat = "a = %d, b = %f\n"
printf(format, a, b);
相当于
printf("a = %d, b = %f\n", a, b);
因此只要改变printf所指向的字符串,就可以改变输入输出格式,这种printf函数称为可变格式输出函数
也可以用字符数组实现:
char format[];
format = "a = %d, b = %f\n"
热心网友
时间:2022-04-09 19:09
首先第一点,非常重要的一点:指针和数组是不同的两个类型!
我们从可以从C语言标准文档中得知:
ISO/IEC 9899:1999 - programing language c
6.2.5 Types
热心网友
时间:2022-04-09 20:44
字符数组名与字符串指针变量名的区别2009-01-19
19:08授课内容:
一、字符串指针变量的说明和使用
字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。
对指向字符变量的指针变量应赋予该字符变量的地址。如:
char
c,*p=&c;表示p是一个指向字符变量c的指针变量。而:
char
*s="c
language";则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。
请看下面一例。main(){
char
*ps;
ps="c
language";
printf("%s",ps);
}
运行结果为:
c
language
上例中,首先定义ps是一个字符指针变量,
然后把字符串的首
地址赋予ps(应写出整个字符串,以便编译系统把该串装入连续的一
块内存单元),并把首地址送入ps。程序中的:
char
*ps;
ps="c
language";等效于:
char
*ps="c
language";
输出字符串中n个字符后的所有字符。
二、字符指针变量的运算
main(){
char
*ps="this
is
a
book";
int
n=10;
ps=ps+n;
printf("%s\n",ps);
}
运行结果为:
book
在程序中对ps初始化时,即把字符串首地址赋予ps,当ps=
ps
+10之后,ps指向字符“b”,因此输出为"book"。
main(){
char
st[20],*ps;
int
i;
printf("input
a
string:\n");
ps=st;
scanf("%s",ps);
for(i=0;ps[i]!='\0';i++)
if(ps[i]=='k'){
printf("there
is
a
'k'
in
the
string\n");
break;
}
if(ps[i]=='\0')
printf("there
is
no
'k'
in
the
string\n");
}
本例是在输入的字符串中查找有无‘k’字符。
三、字符串指针作为函数参数的使用。
要求把一个
字符串的内容复制到另一个字符串中,并且不能使用strcpy函数。函
数cprstr的形参为两个字符指针变量。pss指向源字符串,pds指向目标字符串。表达式:
(*pds=*pss)!=`\0'
cpystr(char
*pss,char
*pds){
while((*pds=*pss)!='\0'){
pds++;
pss++;
}
}
main(){
char
*pa="china",b[10],*pb;
pb=b;
cpystr(pa,pb);
printf("string
a=%s\nstring
b=%s\n",pa,pb);
}
在上例中,程序完成了两项工作:一是把pss指向的源字符复制
到pds所指向的目标字符中,二是判断所复制的字符是否为`\0',若
是则表明源字符串结束,不再循环。否则,pds和pss都加1,指向下
一字符。
四、使用字符串指针变量与字符数组的区别
用字符数组和字符指针变量都可实现字符串的存储和运算。
但两者是有区别的。在使用时应注意以下几个问题:
1.
字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
2.
对字符数组作初始化赋值,必须采用外部类型或静态类型,如:
static
char
st[]={“c
language”};而对字符串指针变量则无此*,如:
char
*ps="c
language";
3.
对字符串指针方式
char
*ps="c
language";可以写为:
char
*ps;
ps="c
language";
而对数组方式:
static
char
st[]={"c
language"};不能写为:
char
st[20];
st={"c
language"};而只能对字符数组的各元素逐个赋值。
从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。
前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是对指针变量直接赋值是可以的。因为c系统对指针变量赋值时要给以确定的地址。因此,
char
*ps="c
langage";或者
char
*ps;
ps="c
language";都是合法的。
热心网友
时间:2022-04-09 22:35
餐桌蹬灿东莞叛麓
指向字符串的指针变量和字符数组有什么区别?
区别一:定义不一样 1、字符串指针变量本身是一个变量,用于存放字符串的首地址。字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。2、字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。区别二:对字符串指针方式不同 1、char *ps=”C Language”;可...
字符指针变量和字符数组的区别
字符(非字符串数组,字符数组和字符串数组是有区别的,字符串数组每个元素都是一个字符串)数组是用来存放字符的数组,在内存中占一段连续的单元。所占内存存放的是字符串。定义方法为:char a[N];N为常量表达式,可初始化。字符指针是指向字符的指针,所占内存单元存放的是所指字符的内存单元。定义方...
字符数组与字符指针变量的区别
一、字符串指针变量的说明和使用 字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如: char c,*p=&c;表示p是一个指向字符变量c的指针变量。而: char *s="C Language";则表示s是一个指向字符...
字符数组和字符指针变量的区别是啥呀?
数组是一个数据结构,指针是一种类型指向变量在内存里的位置,两者原本没有什么相同点,让大家容易产生他们直接有联系的错觉是因为c/c++语言标准中,使用数组名的时候会转换为指向数组第一个元素的地址的指针。数组内储存的数据在内存中是连续的,所以下面代码中:char str[]={'H','e','l','l','...
请教字符数组和字符串指针的区别
(3)赋值方式不同。对字符数组不能整体赋值,只能转化成份量,对单个元素进行。而字符指针变量赋值可整体进行。例如:char s[10];s= \"C++\";/*错,s是常量,怎能被赋值*/ (4)在定义一个字符数组时,编译时即已分配内存单元,有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,...
字符串数组与字符串变量的比较
1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址 为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。2. 对字符数组作初始化赋值,必须采用外部类型或静态类型,如:static char st[]={“...
字符串数组与字符指针的区别
一种是字符数组,另一种是字符串常量,它们在内存中的存储位置不同,使得字符数组可以读取和修改,而字符串常量只能读取不能修改。三、存取效率 char *a = “abcd”; 存于静态存储区。在栈上的数组比指针所指向字符串快,因此慢。而char a[20] = “abcd”; 存于栈上,更快。
char p[]和char *p的区别
一个指针,这个指针指向一个字符串常量 区别在于:数组的话,字符串是存在于这个数组里的,因为这个数组属于局部变量,所以你就算把数组的地址返回给主函数,主函数也没有办法再访问这个地址了。但是如果是指向字符串常量的指针,这个字符串是放在程序的常量区而不是放在局部变量中,那么你把这个常量的地址...
1.字符串指针变量与字符数组都可实现字符串的存储和运算,所以两者没有...
【错误】字符串指针变量本身是一个变量,用于存放字符串的首地址。字符数组用来存放整个字符串。
字符数组和字符指针有什么区别??
使用上基本没有区别,除了sizeof()作用在上面得到的值不一样(由于类型不一样)