zoukankan      html  css  js  c++  java
  • C语言中指针和数组的区别

    看《C专家编程》一书,看到数组与指针并不相同一章,遂做了一段测试:

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	char *p = "abcdefghijklmn";
    	printf("%p\n%p\n%p\n",&p,&p[0],p);
    	return 0;
    }
    

    输出:

    可以看到这样的输出,结果很显然:

    第一个输出的值,0028FF24,应该是符号表中p的地址。

    第二个值,00403000,是地址0028FF24中储存的值,也就是指针p所指向的地址。

    第三个值,可以看到和第二个值是一样的,也就是说字符串指针p所指向的内容的起始地址为00403000,同样也验证了之前所说的。

    在此总结一下指针与数组的区别:

    (1)指针保存数据的地址(准确的说应该是起始地址),而数组保存数据。

    (2)指针间接访问数据,首先获取指针的内容(该内容就是实际数据的地址),然后以之为地址,从这个地址提取数据。如果指针有一个下标[i],那就把指针的内容加上i作为地址,从中提取数据。而数组则直接访问数据,a[i]是简单的以a+i为地址取得数据。

    (3)指针用于动态结构数据,而数组用于存储固定数目且数据类型相同的元素。

    (4)指针相关的函数有malloc与free,而数组隐式分配和删除。

    (5)指针一般指向匿名数据,而数组自身即为数据名。

    指针和数组都可以通过定义时使用字符串常量进行初始化,但是两者是有区别的:

    在ANSI C中,初始化指针时所创建的字符串常量通常是只读的,无法修改;而由字符串常量初始化的数组是允许修改的,其中的单个字符可以在以后改变。

  • 相关阅读:
    Access数据库使用的点滴感受
    Java冒泡排序
    C++ 运算符优先级列表
    给你的 Windows7 加装 Telnet
    忘记 Windows 7 登录密码的处理步骤
    素数/质数的判断(C++)
    Oracle 11g R2 ORA12505 错误
    在IAR环境下,lpc2478 用户程序的地址及中断向量设置
    C语言中的 static变量、static函数
    Notepad++插件介绍&下载地址
  • 原文地址:https://www.cnblogs.com/chrischeng/p/3253031.html
Copyright © 2011-2022 走看看