字符 字符串 字符数组 字符串指针 指针数组

一、字符串指针、字符数组

1.
字符串指针:字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。

char *ps="C Language";

可以写为:

char *ps;  #ps字符串指针,是指针,是一个变量,

ps="C Language";
#ps为字符串的首地址,利用ps++可遍历字符串,字符串存储在以ps为开始地址的地段连续的内存空间中,并以‘\0‘作为字符串的结束。

2.
字符数组:字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。(即用字符数组来存放字符串)。

在c语言中,将字符串作为字符数组来处理。(c++中不是)

字符数组初始化的方法:

1).  可以用字符串常量来初始化字符数组:char  str[]={"Iamhappy"};
  可以省略花括号

char
 str[]="Iamhappy";  #系统自动加入‘\0’

注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值。

下面的赋值方法是错误的:

char str[20];

str="Iamhappy";

对字符数组的各元素逐个赋值。

charstr[10]={‘I‘,‘‘,‘a‘,‘m‘,‘‘,‘h’,‘a‘,‘p‘,‘p‘,‘y‘};

在C语言中,可以用两种方法表示和存放字符串:

(1)用字符数组存放一个字符串
     
 charstr[]="IloveChina";
(2)用字符指针指向一个字符串
     
 char*str="IloveChina";

两种表示方式的字符串输出都用:printf(“%s\n”, str);

%s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str自动加1,使之指向下一个字符...,如此,直到遇到字符串结束标识符"\0"。

时间: 2024-10-10 22:20:29

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

指针和数组,字符和字符串等易混淆概念举例

指针和数组相关概念 文档不知道从哪搞的,基础知识,觉得有用的可以看看,留存. 有侵权的内容,请及时告知,谢谢! 指针和数组相关概念 ************************************************* 字符与字符串的区别:单引号字符其实就是代表ASCII码的整数,而字符串代表了无名数组起始的指针 指针与数组1:任何一个数组下标运算都等同于一个对应的指针运算:对数组只能知道数组的大小,和获得指向下标为0的指针,intcalendar[12][31];sizeof(ca

字符数组与与指针保存字符串区别

#include <stdio.h> int main(int argc, char **argv) { char str[] = "gyu"; //charr*str = "gg" printf("str address is %p\n", str); fun(&str); printf("main -- %s p is %p\n", str, (unsigned int *)str); fun1(&am

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

关于指针与数组定义的字符串

将指针指向一串字符串(char *a = "abcdef";),可以以 “printf("a[2] = %c\n", a[2])“ 这种方式输出字符串中第三个字符.但不能这样 “a[2] = 'G' “ 妄图将字符串中的第三个字符‘c'改为‘G‘.至于为什么,我现在是不知道了.先看代码. 1 #include <stdio.h> 2 3 int main(void) 4 { 5 char *a = "abcdef"; 6 printf

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比

【C】字符串,字符和字节(C与指针第9章)

C语言没有一种显式的数据类型是字符串的. C语言存储字符串:字符串常量(不能修改):字符数组或动态分配的内存(可以修改) **************************************************** 9.1 字符串基础 字符串概念:字符串是以一个位模式为全0的NUL字节结尾的0个或多个字符 NUL字节是终止符,字符串的长度不包含NUL字节 头文件string.h包含了使用字符串函数所需的原型和声明(可以在linux中查看,有很多函数声明). *************

C++——指针---指向数组的指针---指向字符串的指针--指向函数的指针--指针的指针--指针的引用

一.指向数组的指针 代码示例1: 1 int main() 2 { 3 int a[10]={0,2,4,6,8,10,12,14,16,18}; 4 int *p; 5 for(p=&a[0];p<&a[0]+10;p++) 6 printf("%d ",*p); 7 } 代码示例2: int a[10]={0,2,4,6,8,10,12,14,16,18}; int *p; p=a; printf("%d\n",*(a+5));//注意加括

指针,数组,字符串

指针和数组的区别     指针和数组都可以通过下标的方法和指针发(p+i)来访问数组元素     1.指针  可以修改指向     数组名 是常量,表示首元素的地址,不能改变     2.指针存贮空间:4/8个字节     数组的存储空间:元素个数 * 空间存储空间 定义字符串两种方式:     1.使用数组定义字符串 ---->    字符串变量  字符串可以被改变     2.使用指针定义字符串 ---->    字符串常量  字符串元素不可改变 指针作为函数参数进行传递,可以实现形参的改

指针与一维数组和二维数组以及字符串指针数组的学习笔记

废话不多少,直接上代码,关键的东西已经注释了,看注释信息理解即可. 说明:本程序讨论了一维数组和指针的关系,谈论了二维数组和指针之间的关系,讨论了字符串数组指针数组和指针之间的关系,代码中以给出定义的方法和简单的使用,但是有些使用方法并没有列出,如果需要, 请自行加入printf调试即可. 转贴请注明出处,欢迎和我讨论,谢谢. ----------cofin_add #include <stdio.h> void fun(int m, char *((*p)[m])){ int i = 0;

(KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数&gt;=2)

题目: Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3387    Accepted Submission(s): 1549 Problem Description CC always becomes very depressed at the end of this month, he has che