当前位置: 首页 > news >正文

网站与网站链接怎么做重庆seo技术博客

网站与网站链接怎么做,重庆seo技术博客,临平新城开发建设管委会网站,网站外网访问怎么做路由器端口映射一、字符指针可以指向一个字符串。 我们可以用字符串常量对字符指针进行初始化。例如,有说明语句: char *str "This is a string.";是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符…

一、字符指针可以指向一个字符串。

我们可以用字符串常量对字符指针进行初始化。例如,有说明语句:

char *str = "This is a string.";

是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。

这里要注意字符指针与字符数组之间的区别。例如,有说明语句:

char string[ ]="This is a string.";

此时,string是字符数组,它存放了一个字符串。

字符指针str与字符数组string的区别是:str是一个变量,可以改变str使它指向不同的字符串,但不能改变str所指的字符串常量。string是一个数组,每个元素的值都可以改变

例如下面的代码在运行期间将会出错:

 1 #include <iostream>2 using namespace std;3 int main(void)4 {5     char str1[] = "C Language";6     char *str2 = "C Language";7 cout << "str1=" << str1 << endl;8 cout << "str2=" << str2 << endl;9     str1[1] = '-';
10     str2[1] = '+';//出错!不能改变str所指的字符串常量// str2 = "C++ Language";可以改变str使它指向不同的字符串
11 cout << "str1=" << str1 << endl;
12 cout << "str2=" << str2 << endl;
13     return 0;
14 }

二、其它说明

  1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写:“abc”,那么编译器帮你存储的是"abc\0"

  2. "abc"是常量吗?答案是有时是,有时不是。

不是常量的情况:"abc"作为字符数组初始值的时候就不是,如:

char str[] = "abc";

因为定义的是一个字符数组,所以就相当于定义了一些空间来存放"abc",而又因为字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为

char str[3] = {'a','b','c'};

又根据上面的总结1),所以

char str[] = "abc";

的最终结果是

 char str[4] = {'a','b','c','\0'};

做一下扩展:如果

char str[] = "abc";

是在函数内部写的话,那么这里的"abc\0"因为不是常量,所以应该被放在栈上。

是常量的情况:把"abc"赋给一个字符指针变量时,如

char* ptr="abc";

因为定义的是一个普通指针,并没有定义空间来存放"abc",所以编译器得帮我们找地方来存放"abc",显然,把这里的"abc"当成常量并把其放到程序的常量区是编译器最合适的选择。所以尽管ptr的类型不是const char*,并且ptr[0]='x’也能编译通过,但是执行ptr[0]='x’就会发生运行时异常,因为这个语句试图去修改程序常量区中的东西。

记得哪本书中曾经说过char* ptr = “abc”;这种写法原来在C++标准中是不允许的,但是因为这种写法在C中实在是太多了,为了兼容C,不允许也得允许。虽然允许,

但是建议的写法应该是**const char* ptr = “abc”;这样如果后面写**ptr[0] = 'x’的话编译器就不会让它编译通过,也就避免了上面说的运行时异常。

又扩展一下:如果char* ptr = “abc”;写在函数体内,那么虽然这里的"abc\0"被放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的, 只不过是它所指向的东西被放在常量区罢了。

  1. 数组的类型是由该数组所存放的东西的类型以及数组本身的大小决定的。如char s1[3]和char s2[4],s1的类型就是char[3],s2的类型就是char[4],也就是说尽管s1和s2都是字符数组,但两者的类型却是不同的。

  2. 字符串常量的类型可以理解为相应字符常量数组的类型,如"abcdef"的类型就可以看成是const char[7]

  3. sizeof是用来求类型的字节数的。如int a;那么无论是sizeof(int)或者sizeof(a)都是等于4,因为sizeof(a)其实就是sizeof(type of a)

  4. 对于函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通的指针类型,如对于

void func(char sa[100],int ia[20],char *p)

则sa的类型为char*,ia的类型为int*,p的类型为char*

  1. 根据上面的总结,来实战一下:
  • 对于char str[] = "abcdef";就有sizeof(str) == 7,因为str的类型是char[7],
  • 也有sizeof("abcdef") == 7,因为"abcdef"的类型是const char[7]
  • 对于char *ptr = "abcdef";就有sizeof(ptr) == 4,因为ptr的类型是char*。
  • 对于char str2[10] = "abcdef";就有sizeof(str2) == 10,因为str2的类型是char[10]。
  • 对于void func(char sa[100],int ia[20],char *p);
  • 就有sizeof(sa) == sizeof(ia) == sizeof§ == 4,
  • 因为sa的类型是char*,ia的类型是int*,p的类型是char*。

三、区别

(1)字符数组由若干个元素组成,每个元素中存放字符串的一个字符,而字符指针变量中存放的是字符串的首地址。

(2)初始化方式不同。对字符数组初始化要用static存储类别,在编译时进行。而对字符指针变量初始化不必在static,在实际执行时进行。

(3)赋值方式不同。对字符数组不能整体赋值,只能转化成份量,对单个元素进行。而字符指针变量赋值可整体进行。

例如:

1 char s[10];
2 s= \"C++\";/*对字符数组不能整体赋值*/

(4)在定义一个字符数组时,编译时即已分配内存单元,有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,但该指针变量具体指向哪个字符串,并不知道,即指针变量存放的地址不确定。例如:

1 char a[10];
2 char *p;
3 scanf(\"%s\",a);/*正确*/
4 scanf(\"%s\",p);/*非常危险,p的值动态*/

(5)字符指针变量的值可以改变,字符数组名是一个常量,不能改变。例如,有简单程序:

1 main()
2 {
3     char *s=\"china man\"
4     s+=6;
5     printf(\"%s\",s);
6 }
7 
8 //运行结果:man
http://www.dinnco.com/news/70418.html

相关文章:

  • 门户网站建设预算表谷歌下载安装
  • 营销成功案例网站全国今日新增疫情
  • 怎么做游戏推广网站头条新闻 最新消息条
  • 设计师培训班费用钦州seo
  • 网站原型是什么苏州网站制作推广
  • 泰安网站搭建公司网络推广软文怎么写
  • 做冻品海鲜比较大的网站有哪些武汉网站推广优化
  • 英国零售电商网站开发关键洞察力
  • 礼品公司怎么做网站seo快速排名关键词
  • 请选择一个网站制作软件免费网站推广
  • 外国人做外贸都会浏览哪些网站seo站内优化最主要的是什么
  • 电子商务网站建设与实践上机指导站长之家域名查询
  • 义乌网站建设优化排名最好用的手机优化软件
  • 使用php做的学校网站宁波seo推广如何收费
  • 建筑公司分公司seo项目培训
  • 佛山电子商务网站建设学管理培训班去哪里学
  • 达州做网站的公司有哪些重庆seo技术教程博客
  • 衢州+做+网站国内seo工具
  • 网站修改建设百度百家号官网登录
  • 彩页设计图片惠州seo关键字排名
  • 平台网站建设设计国家重大新闻
  • 网站镜像做排名他达拉非片多少钱一盒
  • 网站 布局金阊seo网站优化软件
  • 淄博政府网站建设公司哪家专业软文营销的概念
  • python3的网站开发手机创建网站教程
  • 泉州网站建设报价最优化方法
  • 横沥网站仿做百度首页排名代发
  • 哪个网站可以做封面吉林seo关键词
  • 北京公司网站制作百度旗下所有app列表
  • 线上p2p网站建设建一个app平台的费用多少