——黑马程序员——C语言中的数组(四)
2015-11-03 07:50
447 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
一般形式:
char *变量名 = "字符串内容";
"字符串内容" 是常量
与字符指针的区别:
1、字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的,只能按对指针变量的赋值不同来区别,
2、字符串指针是将常量字符串赋值给指针,
3、而字符指针是将字符变量的地址赋值给指针
4、字符指针输出时为printf("%c",*p); 而字符串指针输出时为printf("%s",str); 因为以前我们学习过字符串是存到字符数组当中的,要输出时需要传数组名,现在用字符串指针输出时也是只需传个地址就可以,str就是字符串的首地址
例如:
char ch = ‘b’;
char *p = &ch;
4、定义时初始化
char *str = "HeiMa";
字符串指针保存的是字符串常量的首地址,也是字符串的第一个字符的地址,str是指针变量,可以指向任意一个字符串;例如:str = "I love HeiMa"
2、使用字符串指针保存的字符串,保存的是字符串常量的首地址,保存在内存的常量区,常量区是只读的,所以不可以修改字符串中的内容
3、不能直接接收从键盘输入,需要先给这个指针申请空间,才能使用;或者定义一个字符数组,让一个字符指针指向该字符数组
作用:用来存放字符串首地址的数组
2、字符串指针变量本身是一个变量,存放的每个元素都是字符串指针,指向一个字符串,存放的都是字符串的首地址,是常量地址,里面的元素不允许修改,但是指针的指向可以改变,可以指向任何字符串
3、 字符数组是一个数组,可以更改字符串中的内容
字符数组和字符串指针的关系
一、字符串指针
定义:指向字符串的指针一般形式:
char *变量名 = "字符串内容";
"字符串内容" 是常量
与字符指针的区别:
1、字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的,只能按对指针变量的赋值不同来区别,
2、字符串指针是将常量字符串赋值给指针,
3、而字符指针是将字符变量的地址赋值给指针
4、字符指针输出时为printf("%c",*p); 而字符串指针输出时为printf("%s",str); 因为以前我们学习过字符串是存到字符数组当中的,要输出时需要传数组名,现在用字符串指针输出时也是只需传个地址就可以,str就是字符串的首地址
#include <stdio.h> #include <stdlib.h> int main() { char a = 'b'; char *p = &a; //定义一个字符串指针 char *str = "Hei Ma Xun Lian Ying!"; //打印字符串 /*以前用字符数组存储字符串,打印时使用的是一个字符数组名(即地址) 此处用字符串数组时只需传个地址有可以,所以是str */ //输出字符串指针 printf("字符串为:%s\n",str); //输出字符指针 printf("字符为:%c\n",*p); system("pause"); return 0; }
例如:
char ch = ‘b’;
char *p = &ch;
4、定义时初始化
char *str = "HeiMa";
字符串指针保存的是字符串常量的首地址,也是字符串的第一个字符的地址,str是指针变量,可以指向任意一个字符串;例如:str = "I love HeiMa"
#include <stdio.h> #include <stdlib.h> int main() { //定义一个字符串指针 char *str = "Hei Ma Xun Lian Ying!"; //打印字符串 //输出字符串指针 printf("字符串为:%s\n",str); //输出字符 printf(" sizeof(str) = %ld\n",sizeof(str));//32位编译器上指针占4个字节 printf("字符串指针地址= %p\n",str); //字符串指针的长度 printf("str len = %ld\n",strlen(str)); system("pause"); return 0; }
#include <stdio.h> #include <stdlib.h> int main() { //定义一个字符串指针 char *str = "Hei Ma Xun Lian Ying!"; //打印字符串 //输出字符串指针 printf("字符串为:%s\n",str); //str指向别的字符串 str = "I Love HeiMa "; //字符串指针的长度 printf("重新指向后:%s\n",str); system("pause"); return 0; }
注意:
1、使用字符数组保存的字符串,地址是保存在内存栈区,是可读可写的,可以修改字符串中的内容2、使用字符串指针保存的字符串,保存的是字符串常量的首地址,保存在内存的常量区,常量区是只读的,所以不可以修改字符串中的内容
3、不能直接接收从键盘输入,需要先给这个指针申请空间,才能使用;或者定义一个字符数组,让一个字符指针指向该字符数组
#include <stdio.h> #include <stdlib.h> int main() { //定义一个字符数组保存字符串 char ch[] = "abc"; //存储在栈区,可读可写 //修改字符数组中的内容 ch[2] = 'Z'; //打印出字符数组的内容 printf(" %s\n",ch); //定义一个字符串指针 char *str = "Hei Ma Xun Lian Ying!"; int i,j; printf("%c \n",*str); //*str = 'Z'; 此写法编译器会报错 //获取字符串中的每个字符 for(i = 0; i < strlen(str); i++) { printf("%c ",*(str++)); } printf(" \n"); //修改字符串指针所指的字符串中的内容 system("pause"); return 0; }
#include <stdio.h> #include <stdlib.h> int main() { //第一种解决方法: //定义一个指针并申请空间 char *str = malloc(100); //接收键盘输入 scanf("%s",str); //打印出字符串 printf("第一种方法:%s\n",str); printf("\n\n"); //第二种解决方法 //定义一个字符数组 char ch2[100]; //定义一个字符指针并指向字符数组ch2 char *p = ch2; //接收键盘输入 scanf("%s",p); //打印出字符串 printf("第二种方法:%s\n",p); system("pause"); return 0; }
二、char 型指针数组
1、char类型指针数组作用:用来存放字符串首地址的数组
#include <stdio.h> #include <stdlib.h> int main() { // char类型的指针数组 char *name[3] = {"Ghhjjjfgdfgfdgfd","Jkkyuyuyouio","Yiidsfsagsg"}; int i; for(i = 0; i < 3; i++) { //打印出每个字符串 printf("%s\n",name[i]); } system("pause"); return 0; }
三、字符串指针变量和字符数组的区别
1、两者都可以用来保存字符串2、字符串指针变量本身是一个变量,存放的每个元素都是字符串指针,指向一个字符串,存放的都是字符串的首地址,是常量地址,里面的元素不允许修改,但是指针的指向可以改变,可以指向任何字符串
3、 字符数组是一个数组,可以更改字符串中的内容
相关文章推荐
- VC++的一些常用方法的累积
- 2013年华为c语言上机试题2
- 使用Codeblocks 编写C文件
- 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
- C语言错误之--初始值(低级错误)
- [转][VC++]限制CEdit(Edit Contrl)只能输入数字和小数点
- C++基础---类(class)
- leetcode笔记:House Robber
- c++调用ado链接mssql数据库详解
- leetcode笔记:Maximum Subarray(最大子串和问题)
- 熟悉预处理标识符: __LINE__ __FILE__ __DATE__ # ##
- 宏和函数的区别
- 【LeetCode从零单刷】Search in Rotated Sorted Array I & II
- 用C++/CLI搭建C++和C#之间的桥梁(一)—— 简介
- c++11特性之std::thread--初识二
- c++11特性之std::thread--初识二
- C语言预处理 # 和## 运算符
- 对C++中文件输出流成员函数的认识
- 任意进制整数之间的相互转换(C++实现)
- C++练习