`

字符型指针变量与字符数组的区别

 
阅读更多

字符型指针变量与字符数组的区别:
(1)
分配内存
假设有字符型指针变量与字符数组如下:
char *p ,s[10];
编译器为字符数组s分配10个字节内存,用于存放10个字符。而编译器只为指针变量p分配4个字节内存。


(2)
初始化赋值含义

字符数组与字符指针的初始化赋值形式相同,但其含义不同。例如:
char s[ ] ="I am a student ! " ;
char *p="You are a student too ! " ;
对于字符数组是将字符串放到为数组分配的存储空间去,而对于字符指针是先将字符串存放到内存,然后将存放字符串的内存起始地址送到指针p中。

  
(3)
赋值方式
字符数组只能对其元素逐个赋值,而不能将字符串赋给字符数组名。对于字符指针变量,

字符串地址可直接赋给字符指针变量。例如:
s="I love China! "; //
字符数组名s不能直接赋值,该语句是错误的。
p="I love China! "; //
指针变量p可以直接赋字符串地址,语句正确
下面这个例子:编译报错:error C2440: “=”: 无法从“const char [7]”转换为“char [30]”

#include <string.h>
#include <iostream>
using namespace std;

void main()
{

char s[30];

char *p=0;

p="hello world";

s="hello world"; //
错误:C2440: “=”: 无法从“const char [7]”转换为“char [30]”

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

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

return;
}

但是对字符数组初始化时可以:

char s[]="hello world"; //正确

char *p=0;

p="hello world";

 

(4)输入方式

可将字符串直接输入字符数组,而不能将字符串直接输入指针变量。但可将指针变量所指字符串直接输出。
例如:scanf("%s",s); //正确
scanf("%s",p); //
错误

例如下程序:

#include<stdio.h>
int main()
{
char *a;
//int i;
//for(i=0;i<3;i++)
scanf("%s",a);
printf("%s\n",a);
return 0;
linux下能编译运行 但运行时提示Segmentation fault

原因是定义了一个字符指针,但指针没有确定地址,所以出现了段错误(即内存空间越界)。

printf("%s",p);//
正确

(5)
值的改变
在程序执行期间,字符数组名表示的起始地址是不能改变的,而指针变量的值是可以改变的。例如:

s=s+5; //错误
p=s+5
//正确

 

分享到:
评论

相关推荐

    易语言指针操作字符串和数组

    指针变量需要先声明,然后通过`取地址`操作获取变量的地址。 - 指针有类型,如整型指针、字符串指针等,确保指针指向的数据类型与实际相符。 2. **字符串指针**: - 易语言中的字符串是由字符组成的序列,可以...

    字符型指针与字符串.zip

    字符型指针与字符串的关系密切,因为字符串在内存中是以字符数组的形式存在的,而字符型指针可以用来指向数组的第一个元素,从而实现对字符串的操作。例如,我们可以通过指针来改变字符串中的某个字符: ```c *ptr ...

    C语言学习笔记变量数组指针

    变量是存储数据的容器,它们可以存储各种类型的数据,如整型(int)、浮点型(float)、字符型(char)等。在C语言中,声明变量时需要指定其类型,例如`int age;`声明了一个整型变量age。变量的值可以在程序运行过程...

    C语言中的字符串数组和字符串指针.pdf

    首先,字符串数组是由多个字符型元素构成的集合,它在内存中占据连续的存储空间。在C语言中,字符串数组是通过char类型来定义的,例如char str[] = {'q', 'w', 'e', 'r', 't', 'y', '\0'};这种定义方式中,str是一...

    C语言查询用书

    10.4.2 使用字符串指针变量与字符数组的区别 28 10.5 函数指针变量 29 10.6 指针型函数 30 10.7 指针数组和指向指针的指针 31 10.7.1 指针数组的概念 31 10.7.2 指向指针的指针 34 10.7.3 main函数的参数 36 10.8 ...

    整形数组与字符数组相互转换

    本示例涉及的是整形数组(int array)与字符数组(uchar array)之间的转换,这对于数据存储和传输具有重要意义。在Qt或VC++环境中,这种转换对于数据库交互,特别是当数据库要求特定数据格式时,尤为关键。 首先,...

    C程序中用指针变量作函数参数

    在深入了解指针变量作为函数参数的应用之前,我们需要先回顾一下关于实参变量与形参变量的基本概念。 - **实参变量**(实际参数):是在调用函数时传递给函数的实际值或者变量。 - **形参变量**(形式参数):是在...

    C语言指针-从底层原理到熟练应用(含源码)

    一、前言 二、变量与指针的本质 1. 内存地址 2. 32位与64位系统 3. 变量 4. 指针变量 5. 操作指针变量 ...3. 指针数组与数组指针 4. 二维数组和指针 5. 结构体指针 6. 函数指针 五、总结

    C语言数组指针(指向数组的指针)_C语言中文网1

    当我们谈论“数组指针”时,实际上是指一个指针变量指向数组的首元素地址。这种概念在处理大型数据集或者需要高效地遍历数组时非常有用。 数组本身在内存中是连续存储的,每个元素都有自己的地址。当我们声明一个...

    程序设计-指针数组.pptx

    例如,可以定义一个字符型指针数组char *name[]={"Follow me","BASIC","Great Wall","Computer design"};其中,每一个元素都是一个指针变量,存放了一个字符串的地址。使用指针数组可以提高字符串处理的效率和灵活性...

    C++数组指针与字符串.pdf

    数组可以是整型、浮点型、字符型等各种类型。数组的声明方式为:type name[size];其中,type是数组元素的数据类型,name是数组的名称,size是数组的大小。 例如,声明一个整型数组:int scores[5];该数组可以存储5...

    C语言程序设计数组字符串指针实用教案.ppt

    定义了一个字符型数组ch,长度为20。 数组在内存中占据一片连续的存储空间。以int a[5] 为例,在内存中为:a[0]a[1]a[2]a[3]a[4],相当于声明了5个整型变量。 数组的特点是所有元素的数据类型都是相同的。数组...

    C++第4章_数组与指针(C++课件,中南大学)

    指针与数组的关系紧密,指针可以用来操作数组,尤其是在函数参数传递和动态内存管理中。在函数中,通过传入数组的指针,可以避免复制整个数组,提高效率。此外,指针也可以用于多维数组,如二维数组,它们在内存中按...

    C语言34:用指针数组作为函数的参数显示多个字符串.rar

    当我们声明一个指针变量时,例如`char *str;`,我们声明了一个能存储字符型数据地址的变量。在C语言中,字符串实际上是由字符组成的数组,因此字符串的地址就是一个指向数组首元素的指针。 接下来,我们来看看指针...

    深入解析C++中的指针数组与指向指针的指针

    指针数组定义:如果一个 数组,其元素均为指针型数据,该数组为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址。 形式:一维指针数组的定义形式为:int【类型名】 *p【数组名】 [4]...

    C语言字符串与指针

    需要注意的是,使用字符数组名或字符指针变量输出字符串是允许的,但在输出数值型数组时,我们不能使用数组名直接输出其全部元素,而是需要逐个元素访问。 另一个重要知识点是字符串指针作为函数参数的使用。在...

    C语言基础-字符串.pdf

    문자数组是用于存储字符型数据的一维数组,每个元素存放一个字符,一维数组可以存放一个字符串。字符数组的定义、引用、存储和初始化方法与一维数组相同,只是要注意字符数组的元素是字符,有特殊的表示格式要求。 ...

    指针的定义和使用 指针与数组

    指针变量,简称为指针,本质上是存储其他变量内存地址的变量。每个变量在内存中都有一个唯一的地址,通过使用取地址运算符`&`,我们可以获取到这个地址。例如,如果我们有一个整型变量`int a = 10;`,我们可以通过`&...

Global site tag (gtag.js) - Google Analytics