字符指针和字符数组

2017年12月19日17:12:10
字符指针和字符数组的整理
 
1.
字符数组是由若干个元素组成,每个元素中存放的是一个字符,而字符指针变量中存放的是第一个字符的地址

2.
char * a;a = "I love China";指针变量可以赋值,但是数组名不可以这样赋值。
char a[12]; a[0]=‘I‘;合法的。 a = "I love China";//不合法!!!

3.char *p = "I love China";//定义指针变量p,并且指向第一个元素I的地址。
 等价于:char * a;a = "I love china!";
  但是数组:
   char str[14]="I love China!";
 不等价于char str[14];str[]="I love China"; //报错!!!!

4.字符数组分配若干个存储单元,但是指针变量值分配一个存储单元。

5.指针变量的值是可以改变的,而数组名代表一个固定的值(数组首元素的地址),不能改变。
 eg: char *a = "I love China";
  a = a+7;//正确,指向C的地址
  char str[]={"I love China"};
  str = str+7;//报错!!!

6.字符数组中的各元素的值是可以改变的(可以对他们再赋值),但字符指针变量指向的字符串常量中的
 内容是不可以被取代的(不能再对它进行赋值)。
 char a[] ="House";
 char * b="House";
 a[2] = ‘r‘;//合法,r取代a数组元素中a[2]的原值u
 b[2]=‘r‘;//非法,字符串常量是不能改变的

7.用指针变量指向的一个格式字符串,可以用它代替printf函数中的格式字符串。
 char * format;
 format = "a = %d,b=%f\n";//等价于:char format[]="a=%d,b=%f\n";
 printf("format,a,b");
 注意:定义数组时初始化或逐个对元素赋值,而不能用赋值语句对数组整体赋值
  eg:char format[];
  format="a=%d,b=%d\n";

时间: 2024-10-28 14:10:26

字符指针和字符数组的相关文章

字符指针与字符数组

学了挺久的c语言,c语言有意思的就有指针这一大块,另外就是字符串,字符指针与字符数组的区别对于初学者应该是比较难以区分的,讲讲自己的看法. 1.定义上的区别 字符数组具有固定的地址,且字符数组的名字不能更改或运算. 字符指针是一个变量,用来存储首字符的地址,且指向的字符串通常为一个常量. char str[] = "helloworld"; str[4] = 'X'; printf("%s",str); 输出结果:hellXworld char *str = &qu

深入理解《字符指针与字符数组真正的区别》

来自: http://blog.csdn.net/on_1y/article/details/13030439 (这篇介绍的非常到位和透彻!!!) char *p="hello"; char q[]="hello"; char *r = (char*)malloc(sizeof(char)*6); 我们知道,字符指针和字符数组,都可以用来存储和表达字符串. 但,它们的实现方式是不同的! 下面,从代码初始化的角度,来分别说明. (1)  char *p="h

关于字符指针和字符数组初始化的问题

int main() { char a[6]="hello"; char b[6]="hello"; char* c="hello"; char* d="hello"; //*(c+1)='!';出错 if(a==b) cout<<"1"<<endl; if(c==d) cout<<"2"<<endl; return 0; } 该题输出的是

字符指针,字符数组,双引号的字符串的区别与联系

作者 :  陈宗权 先说说双引号的字符串,比如"chenzongquan",它是由里面咱们看到的一系列字符以及一个尾随的'\0'字符组成,存储在内存的只读存储区中.只读存储区是在整个程序运行期间都保留着的.可见的,而且其中的数据原则上是保持不变的.所以对一个双引号表示的字符串,只要你知道它的具体地址,可以在程序的任何一个函数中再次使用. 说到只读,要引一下,在16位系统中没有进行内存访问保护,所以在程序运行时实际上也可以改变只读存储区中的数据,但是在32位系统中有内存访问保护,程序运行

字符串常量与 字符指针,字符数组

1. 字符串的定义(1) char buf[10] = "hello"; //定义了10个字节的数组,但只用了6个字节存放字符串(2) char *str = "hello"; //此处hello是字符串常量,存储在长常量区,把首地址传给指针变量 sts(3) char *s = "hello"; // 指针s 与 指针str的内容都是指向字符串常量“hello” 其值相等:(4) char buff[] = "hello";

关于C中字符数组,字符指针以及C++中string类型的两两转换及排序

// practise.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string.h> #include <string> #include <algorithm> #include <iostream> using namespace std; int main() { /* 字符串转字符数组,使用strncpy_s(),比strncpy()安全*/ string str

转:字符数组与字符指针

转自:http://blog.csdn.net/qiumm/article/details/5657120 1.字符指针可以指向一个字符串. 我们可以用字符串常量对字符指针进行初始化.例如,有说明语句: char *str = "This is a string."; 是对字符指针进行初始化.此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址. 这里要注意字符指针与字符数组之间的区别.例如,有说明语句: char string[ ]="This is a st

字符数组、字符指针请不要再纠结

在C语言中字符数组.字符指针的一些特质感觉有点模糊,有些时候只知道要这样做却不知道为什么,过段时间就忘了,下次又得费时费力费钱的找答案,难受.OK,今天就好好琢磨琢磨~ 先来两个基本概念: 1.声明字符数组 int a[10]; 定义了一个长度为10的数组a.换句话说它定义了一个由10个对象组成的集合,这10个对象存储在相邻的内存区域中,名字分别为a[0].a[1]....如果pa的声明为 int *pa; 则说明它是一个指向整形对象的指针,那么赋值语句 pa = &a[0]; 则可以将指针pa

字符数组与字符指针的区别与联系

1.字符指针可以指向一个字符串. 我们可以用字符串常量对字符指针进行初始化.例如,有说明语句: char *str = "This is a string."; 是对字符指针进行初始化.此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址. 这里要注意字符指针与字符数组之间的区别.例如,有说明语句: char string[ ]="This is a string."; 此时,string是字符数组,它存放了一个字符串. 字符指针str与字符数组str