`
beck5859509
  • 浏览: 108653 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

跟我一起学习C(指针篇1)

 
阅读更多
序言:

    最近对C比较感兴趣(以前一直用JAVA),发现很多JAVA的特性,底层都是用的C思想实现的(比如String),打算把近期学习的整理成一个系列,因边学边写,有不妥的地方,欢迎各位看官一起讨论。

     由于JAVA基本语法(数据类型、循环控制、函数(方法声明)都类似,所以不罗列这部分内容,主要讲解C与JAVA的不同点。中间会穿插一此JAVA的场景,并与此做对比。

     本章介绍指针。
     先看一个字符指针的例子。这个例子测试的目地是打印指针P的地址,指针P地址里面的内容,以及指针P所指向的内容。

        char *p = "hello world!";
        //打印指针P地址
        printf("%p\n",&p);
        //打印P所指向的值
        printf("%s\n",p);
        //打印P本身地址所存储的值,即hello world!的地址
        printf("%p\n",*p);






      指针本质就是一个变量(4字节),它也有地址,也会存储内容。所存储内容即为 “=” 右边的起始地址值,使用*p取值(注意与声明指针变量的差别)。如下图。




   
      修改一下,让p重新指向另一个字符串。
        char *p = "hello world!";
        printf("%p\n",&p);
        printf("%s\n",p);
        printf("%p\n",*p);

        p = "c and c++";
        printf("%p\n",&p);




       观察&p的值和前面的一样。证明p声明以后,其地址不会改变,改变的只是P的内容,即*p

       重新声明一个变量q,其也指向hello world!。打印*q的值,发现与*p值相同。是不是与java中的一样,在java中 String a = "abc";  String b = "abc";运行时存放在字符串常量池(永久带)中,a,b所指向的地址一样。

        char *q = "hello world!";
        printf("%p\n",*q);





接着测试:

        strcpy(p,"abc");


这里会报错误,因为企图往一个指针地址赋值abc,即*p的值0x7fff65485a00修改为abc

正确的写法为p = "abc";

再看下面这个例子。
   
            char q[] = "hello C";
            q = "abc";


这也会报错,因为q表示一个字符串常量,声明以后不允许修改。正确的赋值是使用 strcpy(q,"abc");这类似java中声明一个字符串:String q = "abc"; q的值是不允许修改,我们在做+操作时,只不过是编译时会产生另一个新的字符串,内部使用到了stringbuilder
  • 大小: 7.3 KB
  • 大小: 3.3 KB
  • 大小: 4.1 KB
  • 大小: 3.5 KB
0
2
分享到:
评论
4 楼 beck5859509 2015-01-22  
wangxuehui 写道
文章写的不错,希望多写写

哈哈,一起学习,共同进步~~
3 楼 wangxuehui 2015-01-21  
文章写的不错,希望多写写
2 楼 beck5859509 2015-01-19  
wangxuehui 写道
即&p的值0x7fff65485a00修改为abc

hello world 字符串地址为 Ox68


那个地方确实描述有误。
strcpy(p,"abc"); 往起始地址Ox68中放hello world会报错,因为hello world是一个字符串常量,不允许修改。
1 楼 wangxuehui 2015-01-16  
即&p的值0x7fff65485a00修改为abc

hello world 字符串地址为 Ox68

相关推荐

    郁金香VC++外挂编程全集中级篇2.1.6part02

    在接下来的一段时间将由我和大家一起学习游戏外挂的分析,制作。 课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的...

    郁金香VC++外挂编程全集中级篇2.1.5part01

    在接下来的一段时间将由我和大家一起学习游戏外挂的分析,制作。 课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的...

    郁金香VC++外挂编程全集中级篇2.1.3part02

    在接下来的一段时间将由我和大家一起学习游戏外挂的分析,制作。 课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    Go语言学习教程之声明语法(译)

    学习一门新的语言肯定是要从他的基本语法开始,语法构成了整个程序设计的基础,从语法中我们也可以看到这门语言的一些特性,但是话说回来,语法这东西,不同的语言大同小异,所以这也对语法的记忆造成了一定的难度,...

    代码语法错误分析工具pclint8.0

    注意到我的Run一栏的参数和上面的提示不一样,其实我的其他古怪参数都放到c:\lint\s td.lnt中了。请注意,不论你怎样配置参数一定不要忘记了将si-env.lnt包含在你的配置 文件里,否则就无法进行错误信息和程序的...

    深入理解char *a与char a[]的区别

    很多人可能或多或少知道char *a与char a[]的一些区别,但如果详细的说出来却不知如何说去,下面这篇文章就给大家详细介绍了关于C语言中char *a与char a[]的区别,有需要的朋友们可以参考借鉴,下面来一起学习学习吧...

    深入浅出MFC【侯捷】

    使用ActiveX Controls ActiveX Control基础观念:Properties、Methods、Events ActiveX Controls的五大使用步骤 使用ActiveX Control:OcxTest程序 第五篇 附录 附录A 无责任书评:从摇篮到坟墓Windows的完全学习 ...

    深入浅出MFC 2e

    深入浅出MFC(第二版) 目录 ...附录A 无责任书评:从摇篮到坟墓Windows的完全学习 无责任书评:MFC四大天王 附录B Scribble Step 5完整原始码 附录C Visual C++5.0MFC范例程序一览 附录D 以MFC重建DBWIN

    侯捷- -深入浅出MFC

    深入浅出MFC(第二版) 目录 ...附录A 无责任书评:从摇篮到坟墓Windows的完全学习 无责任书评:MFC四大天王 附录B Scribble Step 5完整原始码 附录C Visual C++5.0MFC范例程序一览 附录D 以MFC重建DBWIN

Global site tag (gtag.js) - Google Analytics