字符型指针变量与字符数组的区别:
(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. **字符串指针**: - 易语言中的字符串是由字符组成的序列,可以...
字符型指针与字符串的关系密切,因为字符串在内存中是以字符数组的形式存在的,而字符型指针可以用来指向数组的第一个元素,从而实现对字符串的操作。例如,我们可以通过指针来改变字符串中的某个字符: ```c *ptr ...
变量是存储数据的容器,它们可以存储各种类型的数据,如整型(int)、浮点型(float)、字符型(char)等。在C语言中,声明变量时需要指定其类型,例如`int age;`声明了一个整型变量age。变量的值可以在程序运行过程...
首先,字符串数组是由多个字符型元素构成的集合,它在内存中占据连续的存储空间。在C语言中,字符串数组是通过char类型来定义的,例如char str[] = {'q', 'w', 'e', 'r', 't', 'y', '\0'};这种定义方式中,str是一...
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++环境中,这种转换对于数据库交互,特别是当数据库要求特定数据格式时,尤为关键。 首先,...
在深入了解指针变量作为函数参数的应用之前,我们需要先回顾一下关于实参变量与形参变量的基本概念。 - **实参变量**(实际参数):是在调用函数时传递给函数的实际值或者变量。 - **形参变量**(形式参数):是在...
一、前言 二、变量与指针的本质 1. 内存地址 2. 32位与64位系统 3. 变量 4. 指针变量 5. 操作指针变量 ...3. 指针数组与数组指针 4. 二维数组和指针 5. 结构体指针 6. 函数指针 五、总结
当我们谈论“数组指针”时,实际上是指一个指针变量指向数组的首元素地址。这种概念在处理大型数据集或者需要高效地遍历数组时非常有用。 数组本身在内存中是连续存储的,每个元素都有自己的地址。当我们声明一个...
例如,可以定义一个字符型指针数组char *name[]={"Follow me","BASIC","Great Wall","Computer design"};其中,每一个元素都是一个指针变量,存放了一个字符串的地址。使用指针数组可以提高字符串处理的效率和灵活性...
数组可以是整型、浮点型、字符型等各种类型。数组的声明方式为:type name[size];其中,type是数组元素的数据类型,name是数组的名称,size是数组的大小。 例如,声明一个整型数组:int scores[5];该数组可以存储5...
定义了一个字符型数组ch,长度为20。 数组在内存中占据一片连续的存储空间。以int a[5] 为例,在内存中为:a[0]a[1]a[2]a[3]a[4],相当于声明了5个整型变量。 数组的特点是所有元素的数据类型都是相同的。数组...
指针与数组的关系紧密,指针可以用来操作数组,尤其是在函数参数传递和动态内存管理中。在函数中,通过传入数组的指针,可以避免复制整个数组,提高效率。此外,指针也可以用于多维数组,如二维数组,它们在内存中按...
当我们声明一个指针变量时,例如`char *str;`,我们声明了一个能存储字符型数据地址的变量。在C语言中,字符串实际上是由字符组成的数组,因此字符串的地址就是一个指向数组首元素的指针。 接下来,我们来看看指针...
指针数组定义:如果一个 数组,其元素均为指针型数据,该数组为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址。 形式:一维指针数组的定义形式为:int【类型名】 *p【数组名】 [4]...
需要注意的是,使用字符数组名或字符指针变量输出字符串是允许的,但在输出数值型数组时,我们不能使用数组名直接输出其全部元素,而是需要逐个元素访问。 另一个重要知识点是字符串指针作为函数参数的使用。在...
문자数组是用于存储字符型数据的一维数组,每个元素存放一个字符,一维数组可以存放一个字符串。字符数组的定义、引用、存储和初始化方法与一维数组相同,只是要注意字符数组的元素是字符,有特殊的表示格式要求。 ...
指针变量,简称为指针,本质上是存储其他变量内存地址的变量。每个变量在内存中都有一个唯一的地址,通过使用取地址运算符`&`,我们可以获取到这个地址。例如,如果我们有一个整型变量`int a = 10;`,我们可以通过`&...