`
beck5859509
  • 浏览: 110540 次
  • 性别: 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

相关推荐

    非常好的C语言巩固学习资料,对于提升C语言能力很有帮助,尤其详细介绍了C指针,结构体等重点

    通过深入学习C指针,你可以更好地理解内存管理,提高程序性能,并掌握高级编程技巧,如指针运算和指针数组等。 结构体是C语言中组织数据的强大工具,它允许我们将不同类型的数据组合成一个单一的复合类型。结构体在...

    C语言指针链表例子源码

    ### C语言指针链表实例解析 #### 一、引言 在计算机科学领域,链表是一种常见的数据结构,广泛应用于各种场景。本篇文章将基于一份C语言实现的链表示例代码,深入剖析其核心概念和技术细节。通过这份资料,初学者...

    C语言程序设计重庆大学指针与函数PPT课件.pptx

    在C语言中,指针和函数是两个非常重要的概念,它们可以组合在一起,形成指向函数的指针,这种机制使得程序具有更高的灵活性和可扩展性。这篇PPT课件主要探讨了指向函数的指针以及如何使用它们来调用函数,并将它们...

    c语言学习全套课件.zip

    1. **基础篇**:这部分通常涵盖C语言的基本语法,如变量、数据类型(整型、浮点型、字符型等)、常量、运算符、表达式以及控制结构(顺序、选择、循环)。此外,还会讲解如何进行输入输出操作,如使用`printf`和`...

    一些c语言学习的小论文

    这篇小论文集合可能会为那些希望深入学习C语言的同学提供有价值的见解和指导。 在C语言的学习过程中,有几个关键知识点不容忽视: 1. **基本数据类型**:C语言提供了多种基本数据类型,如int(整型)、char(字符...

    C语言进阶.rar(PDF版本)

    1. **指针操作**:C语言中的指针是其强大之处,它可以用来直接操作内存。学习如何声明、初始化、解引用指针,以及指针算术是理解C语言的关键。同时,理解指针和数组之间的关系,以及指针在函数参数传递中的作用也是...

    C语言编程系统

    1. 使用指针遍历数组:通过将指针初始化为数组首元素的地址,可以使用指针迭代访问数组的所有元素。 2. 动态内存管理:可能涉及使用malloc或calloc函数分配内存,然后用free函数释放内存,这通常与指针一起使用。 3....

    C语言进阶.pdf

    《C语言进阶.pdf》是一本专为初级C程序员和嵌入式程序员设计的进阶教程,旨在帮助读者深入理解并提升C语言编程能力。在C语言的学习过程中,理解和掌握其重点、难点以及常见疑点至关重要,这不仅关乎编程基础的稳固,...

    c的笔记c的笔记

    这篇笔记将深入探讨C语言的核心概念、语法结构以及编程实践,旨在帮助学习者掌握C语言的基础知识。 一、C语言概述 C语言由Dennis Ritchie在1972年为UNIX操作系统设计,因其简洁、高效和强大的特性,迅速成为程序员...

    C语言资料大全(适合所有层次的C语言学习者)

    本资料大全精心整理了一系列C语言的学习资源,旨在为不同水平的学习者提供全面而深入的指导。 一、C语言基础 C语言的基础部分包括变量、数据类型、运算符、控制结构(如if语句、switch语句、循环)等。理解这些基础...

    明解C语言 第3版.pdf

    1. **C语言简介**:介绍C语言的历史背景、特点和应用领域,让读者对C语言有一个初步的认识。 2. **基本语法**:包括变量、数据类型(整型、浮点型、字符型等)、运算符、表达式和语句,这些都是编程的基础。 3. **...

    c语言学习指导性教程

    这篇指导性教程旨在帮助初学者和有经验的程序员更好地理解和掌握C语言的核心概念。 首先,我们从基础开始。C语言的基本结构包括变量声明、常量、数据类型、运算符和表达式。变量是存储数据的容器,而数据类型则决定...

    C语言学习ppt,从基础到深奥

    1. **指针**:指针是C语言的特色,它可以存储内存地址,通过指针可以间接访问和修改变量。理解指针的运算和指针作为函数参数的使用,能灵活地操控内存。 2. **结构体与联合体**:结构体允许我们将不同类型的数据...

    2022年C语言实习心得5篇精选集合最新.docx

    - 结构体则允许我们创建自定义数据类型,将多个不同类型的变量组合在一起,是C语言中构建复杂数据结构的基础。 4. **函数**: - 函数是C语言的核心部分,可以实现代码的模块化和复用。熟练掌握函数的定义、调用...

    2022年c语言上机报告范文【四篇】.docx

    1. **基础知识**:C语言的基础包括变量、数据类型、运算符、流程控制(如if-else、switch-case、for、while循环)、数组、指针等。掌握这些基础知识是编写C程序的前提。 2. **理解指针**:指针是C语言的精髓之一,...

    C语言编程教材

    7. **指针**:C语言的精髓之一,通过指针可以间接操作内存,理解指针的声明、赋值和使用。 8. **结构体与共用体**:结构体允许将不同类型的数据组合在一起,共用体节省内存空间但访问冲突需谨慎处理。 三、高级篇:...

    c语言学习课件

    这篇学习课件涵盖了C语言的核心概念,旨在帮助初学者快速掌握这一技术。以下是对这些知识点的详细解析: 1. **基本语法**:C语言的语法结构严谨,包括变量声明、数据类型(如int、char、float等)、运算符(算术、...

    C语言经典编程900例

    《C语言经典编程900例》是一本专为C语言初学者设计的实践教程,旨在通过丰富的实例帮助读者深入理解和掌握C语言的基础知识及应用技巧。这本书包含了大量的编程实例,覆盖了C语言的各个方面,从基本语法到高级特性,...

    C语言典型试题,含100道经典例题

    三、指针篇 C语言的指针操作是其强大之处,也是初学者常常困惑的地方。指针可以用来高效地操作内存,如动态分配、传递参数等。一道涉及指针的题目可能如下: ```c void swap(int *a, int *b) { int temp = *a; *a ...

    精编完整版C语言教程

    C语言是一种广泛应用于...本教程的C课件涵盖了以上所有知识点,并可能包含实践练习和示例代码,帮助学习者逐步掌握C语言,实现从理论到实践的过渡。无论是初学者还是有一定经验的程序员,都能从中受益,提升编程技能。

Global site tag (gtag.js) - Google Analytics