A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

5 个回复

倒序浏览
谢谢同学的分享,刚好看到指针这个知识点,第三点有些不明白
    char *str = "I am amos!";

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

   
    str2[2] = 'n';

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

既然字符串是常量,那么应该两个都不给改吧,还是第一个是字符数组,可以改?str[2]是什么?数组第三个元素还是指针第三个元素,指针只是指向地址啊,有些不明白
回复 使用道具 举报
wwf707542865 发表于 2015-9-27 21:56
谢谢同学的分享,刚好看到指针这个知识点,第三点有些不明白
    char *str = "I am amos!";

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

str2[2] = 'n',这个是把字符数组的第三个位置的值给改成n,是可以的,str[2]就是a,是个常量,str[2] = 'n'等同于a='n',所以是不对的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马