黑马程序员技术交流社区

标题: C语言学习笔记之字符串指针介绍及使用 [打印本页]

作者: chunhuayun    时间: 2015-9-27 21:08
标题: C语言学习笔记之字符串指针介绍及使用
1.字符串指针
在c 语言中,有两种方式访问一个字符串

1)字符数组
  1.     char str[] = "I am amos!";
  2.     printf("%s\n",str);
复制代码

2)字符串指针指向字符串
  1. Char *变量名 = “字符串内容”; //字符串内容是常量
  2. Char *str = “abbc”;//存的是字符串常量的首地址
  3. Char ch = 'b';
  4. Char *p = &ch;//字符指针
复制代码


【字符串指针变量的定义说明】与【指向字符变量的指针变量说明】是相同的,只能按【指针变量的赋值】不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。

3)字符数组与字符串指针的不同
  1.     char *str = "I am amos!";
  2.     char str2[] = "I am amos!";
  3.    
  4.     str2[2] = 'n';
  5.     str[2] = 'n';//运行时报错,因为字符串是常量,不可修改
  6.     printf("%s,sizeof(str) = %ld\n",str,sizeof(str));//因为在同一个编译器下所有类型的指针在内存中占用的字节数都是相同的
  7.     printf("%s,sizeof(str2) = %ld\n",str2,sizeof(str2));//可以得出整个字符串的长度
复制代码


打印结果:
I am amos!,sizeof(str) = 8
I am amos!,sizeof(str2) = 11



4)妙用字符串指针
将指针变量指向一个格式字符串,用在printf函数中,用于输出二维数组的各种地址表示的值,但在printf语句中用指针变量PF代替了格式串,这也是程序中常用的方法
例如:
  1.     char *str = "I am amos!";
  2.     char str2[] = "I am amos!";
  3.     char *PF = "%s, sizeof(str) = %ld\n";
  4.     printf(PF,str,sizeof(str));
  5.     printf(PF,str2,sizeof(str2));
复制代码


5)不能接受从键盘的输入
例1:
  
  1. char *str;
  2.     scanf("%s",str);//编译通过,运行时报错,此时str是野指针
  3. 例2:
  4.     char *str = NULL;
  5.     scanf("%s",str);//编译通过,运行时报错,此时str未被分配空间

  6. 例3:
  7.     char *str = NULL;
  8.     str = malloc(100);//给str申请了100个字节的内存空间
  9.     scanf("%s",str);
  10.     printf("%s",str);
复制代码


打印结果:
abcdefg
abcdefg


作者: wwf707542865    时间: 2015-9-27 21:56
谢谢同学的分享,刚好看到指针这个知识点,第三点有些不明白
    char *str = "I am amos!";

    char str2[] = "I am amos!";

   
    str2[2] = 'n';

    str[2] = 'n';//运行时报错,因为字符串是常量,不可修改

既然字符串是常量,那么应该两个都不给改吧,还是第一个是字符数组,可以改?str[2]是什么?数组第三个元素还是指针第三个元素,指针只是指向地址啊,有些不明白

作者: chunhuayun    时间: 2015-9-27 22:33
wwf707542865 发表于 2015-9-27 21:56
谢谢同学的分享,刚好看到指针这个知识点,第三点有些不明白
    char *str = "I am amos!";

str2是一个字符数组,只是初始化的时候用的十字符串。字符数组的某个元素的值是可以改的。str[2]是字符串常量的第三个元素的值,因为字符串常量是不可更改的,所以会报错
作者: liminghui    时间: 2015-9-28 09:28
学习学习 不说话。
作者: YaYa    时间: 2015-9-28 09:36
good good study up   学习了
作者: Brisingr    时间: 2015-9-28 12:36
wwf707542865 发表于 2015-9-27 21:56
谢谢同学的分享,刚好看到指针这个知识点,第三点有些不明白
    char *str = "I am amos!";

str2[2] = 'n',这个是把字符数组的第三个位置的值给改成n,是可以的,str[2]就是a,是个常量,str[2] = 'n'等同于a='n',所以是不对的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2