(C语言)数组与指针的区别

以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解。刚刚在李云的《专业嵌入式软件开发》中,看了讲述数组与指针区别的一章,似乎有所领悟。本着知乎上看到的这张图,我试着将自己的理解写一些。

首先需要了解数组和指针的工作模式。

数组:

char name[] = {‘T‘, ‘o‘, ‘n‘, ‘y‘, ‘\0‘};

此时,这个数组的地址是这样的。其中name指向数组的开头:

指针:

char name[] = {‘T‘, ‘o‘, ‘n‘, ‘y‘, ‘\0‘};
char * p_name = name;

在C语言中,指针占4个字节,正好能存一个地址。现在,p_name里存的内容里就是name(起始的)的地址。

以上就是数组和指针工作模式上的区别,接下来看他们在什么情况下会不一样。

(回头继续更新)

时间: 2024-09-30 16:10:05

(C语言)数组与指针的区别的相关文章

数组与指针的区别,以及在STL中传递数组/指针

数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = { 1,2,3,4,5 }; f(a); 上述代码输出的是4(32位系统)或8(64位系统),总之不是sizeof(int) * 5(数组大小). 为什么明明形参是数组形式的int [],实际上和指针形式的int *无异呢?关键原因就在于,数组是不能作为左值的. 也就是说,你不能定义两个数组,比如int a[

c语言数组与指针详解(上)

彻底搞懂c语言数组与指针 部分引用 c语言指针怎么理解 知乎 程序设计入门----c语言 (浙江大学翁恺) <c primer plus>第六版 基础知识 1. 指针基础 &:代表对变量取地址 int*或char*或者把这个星号紧贴着变量比如int *a = &b: 代表新建一个用来储存地址的变量,这也代表&b这个值的类型是int*. int *a, b 或 int* a, b 中只有a是int指针类型,b是int整型. 关于电脑大小端的讨论:大端是指是指数据的高字节,

数组与指针的区别

数组与指针的区别 1.数组与指针的定义 指针是变量,存储的是一个地址,用来间接访问数据,在32位系统下占用4个字节.指针可以指向任何内存空间,但不是任何内存空间都可以通过指针去访问(不能访问寄存器). 数组是标识符且不占用存储空间,类似于常量,因此数组名不能作为左值. short *sz[4]; //大小为4的一维数组,元素是指针 short (*sz1)[4]; //指向数组的指针 2.extern数组与指针 先看这一段代码: /* * d.c * Created on: * Author:

字符串拼接 strcat ;数组和指针的区别

问题:字符串拼接 strcat 方法1: 开辟新空间,存放结果: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> char* _strcat(char* str1, char* str2){ assert(str1 != NULL && str2 != NULL); char* ret = (char*)malloc((strlen(

引用和指针的区别,数组和指针的区别

一:引用和指针的区别 1:引用并非对象,它只是为一个已存在的对象所起的另外一个名字,必须初始化,而且无法改变它绑定的对象,之后每次使用这个引用都是访问最初绑定的那个对象. 2:指针本身是对象,可以不用初始化,可以改变指针指向的对象 二:指针与数组的区别 指针 数组 保存数据的地址 保存数据 间接访问数据 直接访问 通常用于动态数据结构 通常用于存储固定数目数据类型相同的元素 相关操作malloc(),free()等 隐式分配和删除 同常指向匿名数据 自身即为数据名 在C语言中对于下面的两种情况,

深入理解数组与指针的区别

在大一刚开始学习C的我们也许并没有真正的理解数组与指针,其实C的精华部分便是指针与内存的分配这一块. 那是充其量我们能够知道数组与指针肯定不是完全等价的,相同点就是:对数组的引用总是转化为对指针的引用,而不同点呢就是数组名是常量而指针是变量仅此而已,随着我们资历不断的提升,我们么更加进一步的去理解它,从他的本质去即内存的分配与访问去理解它. 好了,首先呢我们必须明白一个概念在C语言中,一个变量的声明和定义有什么区别. 我们知道定义只是一个特殊的声明. 定义:只能出现在一个地方,创建新对象,同时确

数组与指针的区别?

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.指针可以随时指向任意类型的内存块.    (1)修改内容上的差别 char a[] = "hello";  //它们有各自的内存空间:a[0] = 'X';char *p = "world"; // 注意p 指向常量字符串p[0] = 'X'; // 编译器不能发现该错误,运行时错误 (2) 用运算符sizeof 可以计算出数组的容量(字节数).sizeof(p),p 为指针得到的是一个 指针变量的字节数,

C语言数组与指针

一维数组与指针 int a[10]; int *pa; 一维数组的数组名代表的就是该数组第一个元素的地址,所以复制语句pa=&a[0]等价于pa=a.对数组元素a[i]的引用等价于*(a+i).在计算数组元素a[i]的值时,C语言实际上先将*(a+1)后再进行求值,所以用指针编写的程序比用数组下标编写的程序执行速度快. 数组名和指针之间有一个不同之处,指针是一个变量,pa=a和pa++都是合法的.但数组名不是变量,因此,类似于a=pa和a++形式的语句是非法的. 当把数组名传递给一个函数时,实际

转:数组与指针的区别

转自:二维数组和指向指针的指针 一道面试题引发的问题,首先要知道[]的优先级高于*,题目: char **p,a[6][8]; 问p=a是否会导致程序在以后出现问题?为什么? 直接用程序说明: #include<stdio.h> void main(){ char **p,a[6][8]; p = a; printf("\n");} 编译,然后就会发现通不过,报错:错误 1 error C2440: “=”: 无法从“char [6][8]”转换为“char **” 于是乎