`

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

 
阅读更多

字符型指针变量与字符数组的区别:
(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
//正确

 

分享到:
评论

相关推荐

    C语言全书word版CHAR10

    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 ...

    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 ...

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

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

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

    1. 指针变量作函数与变量作函数的区别 c语言规定实参变量对形参变量的数据传递是“值传递”即单向传递、只有实参传给形参,而不能有形参传给实参,在内存中实参与形参是不同的存储单元。在调用函数时,给形参分配...

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

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

    谭浩强C程序设计第三版

    使用字符串指针变量与字符数组的区别 168 函数指针变量 169 指针型函数 170 指针数组和指向指针的指针 171 指针数组的概念 171 指向指针的指针 174 main函数的参数 176 有关指针的数据类型和指针运算的小结 177 有关...

    C程序设计(第四版)学习辅导【谭浩强】

    8.4.3使用字符指针变量和字符数组的比较265 8.5指向函数的指针268 8.5.1什么是函数指针268 8.5.2用函数指针变量调用函数268 8.5.3怎样定义和使用指向函数的指针变量270 8.5.4用指向函数的指针作函数参数272 8.6返回...

    谭浩强 C语言程序设计 教程全书 Word版

    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 ...

    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 ...

    C语言程序设计(谭浩强)第三版

     3.2.4字符型数据  3.2.5浮点型数据  3.2.6怎样确定常量的类型  3.2.7运算符和表达式  3.3C语句  3.3.1C语句的作用和分类  3.3.2最基本的语句——赋值语句  3.4数据的输入输出  3.4.1输入输出举例  3.4.2...

    《C语言程序设计》谭浩强

    10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main函数的参数 166 ...

    谭浩强版c语言程序设计

    10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main函数的参数 166 ...

    谭浩强c语言word版

    10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main函数的参数 166 ...

    谭浩强c语言程序设计

    10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main函数的参数 166 ...

    C程序设计语言_第2版(带书签目录)

    第五章 指针与数组 5.1 指针与地址 5.2 指针与函数参数 5.3 指针与数组 5.4 地址算术运算 5.5 字符指针与函数 5.6 指针数组以及指向指针的指针 5.7 多维数组 5.8 指针数组的初始化 5.9 指针与多维数组 ...

    C语言:变量深度认识与理解

    //一个字符型数组 下面我们对上面 4个变量进行分解 int a ; //int 变量的类型 a变量的申明 一个整数型的变量 a ; double b;//double 变量类型 b变量的申明 一个双精度浮点型b; char c; //char 变量类型 c变量的申明...

    C语言程序设计-地址、指针和变量.pptx

    若我们在程序中定义了一个变量,C编译系统就会根据定义的变量的类型为其分配一定字节数的内存空间(如:字符型占1个字节,整型占2字节,单精度实型占4字节,双精度实型占8字节)。每个变量所占存储单元的第一字节的...

    本示例是一个使用C语言中char数据类型的代码示例,该代码读取用户输入的字符,并打印其ASCII值

    在C语言中,`char` 是一个关键字,用于声明字符型变量或函数返回值为字符类型。`char` 可以存储一个字节(8位)的数据,表示一个字符或整数值。 常见的使用场景包括: 1. 声明字符型变量:使用 `char` 关键字可以...

Global site tag (gtag.js) - Google Analytics