第一种:

char *a 与char a[] 的区别

char *d = "hello" 中的a是指向第一个字符‘a'的一个指针;char s[20] = "hello" 中数组名a也是执行数组第一个字符'h'的指针。现执行下列操作:strcat(d, s)。把字符串加到指针所指的字串上去,出现段错误,本质原因:*d="0123456789"存放在常量区,是无法修的。而数组是存放在栈中,是可以修改的。两者区别如下:

(1)读写能力:char *a = "abcd"此时"abcd"存放在常量区。通过指针只可以访问字符串常量,而不可以改变它。而char a[20] = "abcd"; 此时 "abcd"存放在栈。可以通过指针去访问和修改数组内容。

(2)赋值时刻:char *a = "abcd"是在编译时就确定了(因为为常量)。而char a[20] = "abcd"; 在运行时确定.

(3)存取效率:char *a = "abcd"; 存于静态存储区。在栈上的数组比指针所指向字符串快。因此慢,而char a[20] = "abcd"存于栈上,快。
另外注意:char a[] = "01234",虽然没有指明字符串的长度,但是此时系统已经开好了,就是大小为6-----'0' '1' '2' '3' '4' '5' '\0',(注意strlen(a)是不计'\0')

第二种:

char s[] 和 char *s 的区别

之前自己写代码碰到 char s[];和char *s 的各种方面总是搞不清楚,知道他们是不一样的,但因为将他们打印出来有都是 相同的地址所以一直懵逼,今天特地网上整理了下,将他们彻底搞定

不同点:

1.在声明时

char *s1="hello";//声明一个指针指向常量"hello"
char s2[]="hello";//在栈中开辟一个数组字符"hello";
/** s2[]="hello" 相当于
* char s2[6];
* s2[0]='h';
* s2[1]='e';
* s2[2]='l';
* s2[3]='l';
* s2[4]='0';
* s2[5]='\0';
**/

说明:

s1内容不能修改,因为他指向常量
s2内容可以修改,因为他指代内存中的变量区
s2其地址和容量在生命期里不能改变

2.使用时

char str[255];//声明一个字符数组str占255个字节
char *p;//声明一个字符串指针p
char *sp;//声明一个字符串指针spsp = str;/**实际上是 sp=&str; 编译器做过处理**/
//需要有一个指针来保存原先地址
p=sp;
*(sp++)='1';
*(sp++)='2';
*sp++='3';//相当于*(sp++)
*sp++='4';
*sp++='5';
*sp='\0';
printf("%s\n",p);printf("%p\n",p);
printf("%p\n",&str);
printf("%p\n",sp-5);
printf("%s\n",(sp-5));//等同于===============================================
int i=0;
char str[255];//声明一个字符数组str占255个字节
char *p;//声明一个字符串指针pp=str;
str[i++]='1';
str[i++]='2';
str[i++]='3';
str[i++]='4';
str[i++]='5';
str[i]='\0';printf("%s\n",p);
printf("%p\n",p);

说明:

char str[] 实际是一个(字符数组)指针,不是(字符)指针
char str[] 不是一个真实意义(声明的)的指针类型,不能进行正常指针的加减计算操作
char *p是一个指针类型可以进行计算操作

相同点:
1.作为形参完全相同
例:

void function(char *s1);
void function(char s1[]);

2.只读取不修改的时候
例:

char *s1="hello";
char s2[]="hello";
printf("s1[1]=[%c]\n",s1[1]); //s1[1]=[e]
printf("s2[1]=[%c]\n",s2[1]); //s2[1]=[e]
printf("s1=[%s]\n",s1); //s1=[hello]
printf("s2=[%s]\n",s2); //s2=[hello]

char s[] 和 char *s 的区别相关推荐

  1. char str[]与char *str的区别

    一个具体例子: main() {char *p="abc123ABC";//char p[]="abc123ABC"int i=0;while(*(p+i)!= ...

  2. char s []和char * s有什么区别?

    在C语言中,可以在这样的声明中使用字符串文字: char s[] = "hello"; 或像这样: char *s = "hello"; 那么区别是什么呢? 我 ...

  3. char[]数组与char *指针的区别

    char[]数组与char *指针的区别 问题描述 虽然很久之前有看过关于char指针和char数组的区别,但是当时没有系统的整理,到现在频繁遇到,在string,char[], char *中迷失了 ...

  4. int main中char** argv与char *argv[]区别?(main函数)

    标准main函数写法(两种都可以): int main(int argc, char** argv){} int main(int argc, char* argc[]){} 怎么还是有点懵逼呢/?? ...

  5. char str[] 和 char *str 的区别

    char* get_str(void) { char str[] = {"abcd"}; return str; } char str[] = {"abcd"} ...

  6. C++中 char *s 和 char s[] 的区别

    原因 刚好看到给main传递参数,书上(C++Primer)说" int main(int argc, char *argv[])也可以写成 int main(int argc, char ...

  7. C语言高级编程:char、signed char 和 unsigned char的使用区别

    1. 区别与联系: 1)在定义字符类型时一般使用char来定义 2)char被当成有符号或是无符号视不同编译器决定,由于ASCII码范围从0-0x7F(127),所以char无论被当成有符号还是无符号 ...

  8. char *a 与char a[] 的区别和char** argv与char *argv[]区别

    char *a 与char a[] 的区别 char *a = "hello" 中的a是指向第一个字符'a'的一个指针 char a[20] = "hello" ...

  9. cont char *p 和 char* const p 区别及记忆方法

    /* cont char *p 和 char* const p 区别及记忆方法 const char *p = "hello"; 和 char const *p = "h ...

最新文章

  1. 这样就算会了PHP么?-10
  2. JDK8中好用的日期处理-LocalDate类-LocalTime-LocalDateTIme,mysql解决时区相差13小时的问题,日期格式器DateTimeFormatter
  3. oracle reverse 反转函数
  4. java流读取xml_使用FileInputStream(用于Java)读取XML文件?
  5. 史上最硬核文科生,擅长解决数学难题,却视考试成为终生噩梦
  6. word删除所有的回车、空格
  7. USACO 3.2.3 Spin
  8. 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
  9. 探访蔚来合肥工厂:是ES8与ES6生产基地 能年产10万台
  10. Android-Universal-Image-Loader-master(图片浏览+缓存)
  11. 神经网络matlab仿真,MATLAB神经网络仿真与应用_IT教程网
  12. 计算机操作系统--思维导图
  13. 外网/公网出口IP查询方法汇总
  14. 云南计算机网络技术排名,2017年云南大学排名
  15. 十秒钟刷完云班课的一节视频
  16. 前端之HTML学习笔记一(B站黑马程序员)
  17. 【tf.keras】官方教程一 Keras overview
  18. python black_如何使用Black自动格式化Python代码
  19. 【软件测试】黑盒测试技术——等价类划分和边界值分析
  20. 非常道 2010-4-5日

热门文章

  1. Py中enumerate方法【转载】
  2. 洛谷 P1028 数的计算
  3. hihocoder 1320 压缩字符串(字符串+dp)
  4. 实验四、主存空间的分配和回收模拟
  5. 快快: 一点即玩的游戏客户端平台
  6. 走火入魔通用权限管理不仅是权限设计更是总体设计规划、快速开发集成平台(集中控制体系)...
  7. 中断和异常,陷阱的区别和联系
  8. ROS学习(十二):ROS URDF-model_state
  9. PC处理器装机中的认识 三
  10. python3.5和pip3安装路径不匹配问题