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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 光辉岁月 初级黑马   /  2014-5-28 23:09  /  1179 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 光辉岁月 于 2014-5-29 09:23 编辑

请问数组和指针有什么区别吗?
比如:

char str1[] = "abcdef";
char *str2 = "abcdef";

他们用起来不都是一样的吗?

评分

参与人数 1技术分 +1 收起 理由
wanzhu159 + 1

查看全部评分

7 个回复

正序浏览
学习学习
回复 使用道具 举报
an1911 中级黑马 2014-5-29 10:41:30
7#
学习学习
回复 使用道具 举报
学习啦{:3_53:}
回复 使用道具 举报
XCodeRush 发表于 2014-5-29 00:25
回答:主要的区别在于数组名str1是个常量,而指针str2是个变量.
数组元素是变量,但数组名str1不是变量。
...

回答的太仔细了吧{:3_53:}
回复 使用道具 举报
回答:主要的区别在于数组名str1是个常量,而指针str2是个变量.
数组元素是变量,但数组名str1不是变量。
str2是指针,指针是变量,但str2中并不是存储字符串,而是存储字符串的地址。
用一个程序给你解释一下:

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(void)
  4. {
  5.     char str1[] = "abcdef";
  6.     char *str2 = "abcdef";
  7.    
  8.     // 首先他们都可以使用[]遍历字符串中的所有元素
  9.     // 用数组符号[]循环输出str1中的每个元素
  10.     for (int i = 0; i < strlen(str1); i++) {
  11.         putchar(str1[i]);
  12.     }
  13.     putchar('\n');
  14.     // 用数组符号[]循环输出str2中的每个元素
  15.     for (int i = 0; i < strlen(str2); i++) {
  16.         putchar(str2[i]);
  17.     }
  18.     putchar('\n');
  19.    
  20.     // str1和str2都可以使用指针加法
  21.     // 用指针加法循环输出str1中的每个元素
  22.     for (int i = 0; i < strlen(str1); i++) {
  23.         putchar(*(str1 + i));
  24.     }
  25.     putchar('\n');
  26.     // 用指针加法循环输出str2中的每个元素
  27.     for (int i = 0; i < strlen(str2); i++) {
  28.         putchar(*(str2 + i));
  29.     }
  30.     putchar('\n');
  31.    
  32.     // 可以改变str1中的元素
  33.     str1[0] = 'A';
  34.     // 不可以改变str1的值,因为他是常量
  35.     // str1 = str2; // 错误用法
  36.    
  37.     // 不可以改变str2所指向字符串中的元素
  38.     // 因为此时str2所指向的字符串存储在程序用来存放常量的那部分内存中
  39.     // str2[0] = 'A';   // 错误用法
  40.     // 建议初始化一个指向字符串常量的指针时使用const修饰符
  41.     const char * str3 = "abcdef";
  42.     // str3[0] = 'A';   // 此时编译器会报错
  43.     // 可以改变str2的值,因为他是指针,指针是变量
  44.     str2 = str1;    // 此时指针str2指向str1数组的首元素

  45.     return 0;
  46. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报 1 0
char str1[] = "abcdef";  是字符串变量,存储在内存的栈中,可以修改字符串里的字符
例如str1[2] = 'd';
printf("%s",str);  // 输出的结果就是 abddef
char *str2 = "abcdef";   是字符串常量,存储在内存的常量区,不可以修改,
回复 使用道具 举报
我记得李明杰老师讲的视频里面讲的是,数组用来操作字符串是可以修改的,字符串中的元素是不能修改的。更加高深的我就不太会了,坐等楼下大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马