字符、地址详解(及字符串指针、字符数组关系)
2017-06-24 09:45
288 查看
前驱结点:指针、输入输出(请参照本专题其他文章)
内存,就是那个“位置编号”里存的东西。
是不是很形象?“地址”和“你想找的房子(内存)”
地址在汇编语言、编译原理、计算机组成原理课程中都有提到,但是在高级一些的语言就见不到了,被隐藏了。
汇编和编译原理中提到的地址用在数组上,汇编、操作系统的寻址,组成原理的”程序内存“都有提到。
在C语言中,地址可以通过取地址符&得到,可以通过指针变量存储、读取或者更改
指针(地址),有了它,就可以找到执行的开始点(函数指针),就可以在形参函数内改变外面的值(不是全局变量也可以)。总之是一个很有力的工具!指针的各种应用:http://blog.csdn.net/sinat_27382047/article/details/71941458
最坚实基础实在的玩意,用指针变量(也就是地址变量)就可以非常自由的访问数据,比如我就能用**&p访问*p(虽然平时不可能这么用)。来自:http://blog.csdn.net/sinat_27382047/article/details/70950898
查到的输出变量名的方法!很不错!
平时最简单的方式,在自己的什么学生管理系统就建议设成字符指针类型,还不用担心什么“烫烫烫”、”屯屯屯“之类的未初始化的bug
地址是什么
地址,就是计算机找东西的“位置编号”。内存,就是那个“位置编号”里存的东西。
是不是很形象?“地址”和“你想找的房子(内存)”
地址在汇编语言、编译原理、计算机组成原理课程中都有提到,但是在高级一些的语言就见不到了,被隐藏了。
汇编和编译原理中提到的地址用在数组上,汇编、操作系统的寻址,组成原理的”程序内存“都有提到。
在C语言中,地址可以通过取地址符&得到,可以通过指针变量存储、读取或者更改
指针(地址),有了它,就可以找到执行的开始点(函数指针),就可以在形参函数内改变外面的值(不是全局变量也可以)。总之是一个很有力的工具!指针的各种应用:http://blog.csdn.net/sinat_27382047/article/details/71941458
最坚实基础实在的玩意,用指针变量(也就是地址变量)就可以非常自由的访问数据,比如我就能用**&p访问*p(虽然平时不可能这么用)。来自:http://blog.csdn.net/sinat_27382047/article/details/70950898
字符串与字符数组
字符数组:
#include<stdio.h> #define fun(n) printf(#n " = %s\n", (n));//输出变量名的方法=== void main() { char a[10]; a[0] = 'h'; a[1] = 'e'; a[2] = 'l'; a[3] = '\0';//最累的方法,\0必须自己记着写 char b[10] = {'h','e','l','l','o'};//这种方法可以自动赋\0 char c[] = "hello world!";//字符数组里最简单的方法 char d[][7] = { {"hello "} ,{"world!"} };//综合了c的方法,并且二维数组可以省略第一维(只需知道 几个分为“一组”,分为“几组”计算机会自己搞定) char e[10]; printf("请输入9个以内的字符(测试e)"); scanf("%s",e);//因为数组首地址就是数组名,所以没有取地址符&,在此直接按%s字符串格式输入,方便 printf("e=%s\n", e); printf("b[2]=%c\n", b[2]); fun(a);//===fun函数在预定义里写了,均按照%s字符串输出 fun(b);//=== fun(c);//=== fun(d);//=== }
查到的输出变量名的方法!很不错!
#define fun(n) printf(#n " = %s\n", (n));//输出变量名的方法
字符串:
#include<stdio.h> void main() { char *p1 = "我是P1";//指针变量定义时赋值 /*P256 没有定义字符数组,char*型变量p1,用字符串 常量 "我是P1"对它初始化。 C语言对字符串常量是按照字符数组处理的, 在内存中开辟了一个字符数组用来存放该字符串常量, 但是这个字符串数组是没有名字的,因此不能通过数组名来引用,只能通过指针变量来引用*/ char *p2; p2 = "我是P2";//p1\p2初始化含义等价 char string[] = "我是string";//字符数组初始化时赋值【对比: 指针变量定义时赋值 ,它有名字,可以被引用】 //P263 printf("%s\n", p1);//%s,按照字符串格式声明输出p1 地址内 的东西 printf("%s\n", p2); printf("%s\n", string);//数组的名字就是首元素的 地址 }
平时最简单的方式,在自己的什么学生管理系统就建议设成字符指针类型,还不用担心什么“烫烫烫”、”屯屯屯“之类的未初始化的bug
char *p1 = "我是P1";//指针变量定义时赋值
相关文章推荐
- char * 与 char [] 区别,char *[] 与 char[][]区别。字符串指针的数组与二维char数组区别。字符串常量赋予指针与字符数组区别。"字符串"等价于其首元素"字"的地址
- 字符串、字符数组、数组、指针关系总结
- C字符串、字符数组、指针数组、指向数组的指针 彻底研究
- 字符串、字符数组、字符指针
- C语言中字符数组和字符串指针分析
- 鸡啄米:C++编程入门系列之三十三(数组、指针和字符串:用字符数组存放和处理字符串)
- C/C++(字符串处理)字符指针、字符数组用法大总结
- 字符串指针与字符数组
- 指针剖析,地址关系 (二) 数组与指针、数组名的关系
- C语言中字符数组和字符串指针分析
- C语言中字符数组和字符串指针分析
- C语言中字符数组和字符串指针分析
- 字符串指针与字符数组(ZT)
- 字符串指针和字符数组的区别
- 函数内 声明一个字符数组和一个指向字符串数组的指针 区别
- 字符串、字符数组、字符指针
- 字符串string 字符数组与指向字符串的指针pchar的区别与联系
- C 语言中字符数组和字符串指针分析
- 鸡啄米:C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- 指针 字符数组 字符串