char p[]="hello";与char *p="hello";定义在同一个函数中,结果return (p);
按照一般情况,两者没有太大区别,但看了下《高质量C编程》,
里面刚好也有这个例子,但从内存上考虑,有一种是错误的,
相信各位前辈遇到过同样的问题,有没有一个让人便于的理解?
数组不就可以用一个指针来表示吗?为何两者在内存分配上又会有这样的区别呢?可否介绍本书,或资料关于内存处理的全过程,想彻底了解下!谢谢了!
追答这些属于进阶内容了
推荐一本《C专家编程》
无论数组还是指针还是变量都是在内存中的一堆二进制码,但是由于编程的需要定制了不同的规则将其分配在不同的区域
C语言中,数组和指针定义在内存方面的区别在哪?
1,指针变量用于保存数据的地址,数组用于直接保存数据(当然你可能见过,数组的每个元素是指针,不过,一组指针也是数据,它们各自的内容才是地址)2,访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址 3,指针通常用于动态数据;数组通常用于固定...
c语言数组和指针的区别
C语言中,数组和指针是两个不同的概念,它们之间存在显著的区别:定义与本质:数组是一种数据结构,用于存储固定数量的同类型元素的连续内存块。而指针是一个变量,其值是一个内存地址,用于指向内存中的某个位置。内存分配:数组在编译时分配内存空间,其大小在声明时确定且固定不变。指针本身只占用固定...
C语言中,指针和数组的区别和联系?
区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,...
指针和数组的区别
指针和数组的区别是指针变量用于保存数据的地址,数组用于直接保存数据。指针一般指向一个函数或一个变量,在信息工程中是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中的寄存器(Register)。指针一般出现在比较近机器语言的语言,如汇编语言或C语言。面向对象语言如Java一般避免用指针,而是...
c语言指针数组和数组指针的区别
对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体...
C语言:简述一下“数组和指针的关系”?
一、概念 数组:数组是用于储存多个相同类型数据的集合。指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。二、赋值、存储方式、求sizeof、初始化等 1.赋值 同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝 2.存储方式 数组:数组在内存中...
字符串数组与字符指针的区别
C语言有两种表示字符串的方法,一种是字符数组,另一种是字符串常量,它们在内存中的存储位置不同,使得字符数组可以读取和修改,而字符串常量只能读取不能修改。三、存取效率 char *a = “abcd”; 存于静态存储区。在栈上的数组比指针所指向字符串快,因此慢。而char a[20] = “abcd”; 存于...
C语言里,什么时候用数组什么时候用指针和动态内存(malloc\/calloc)?
数组大小确实有限制.因为局部数组是分配在栈上的,而栈大小是有限制的,如果超过限制,就会出现栈溢出.如果不能明确知道所需内存的大小,编程中这种情况非常常见.这个时候只能用动态内存.但是用动态内存容易出bug,主要是忘记忘记释放内存(内存溢出)和野指针(指针指向的地址不是malloc分配的内存地址). 另外,...
C中数组和指针到底是否相同?
下面着重谈一下指针和数组的区别。一.指针和数组的定义 指针是指针,指针变量存储的是一个地址,用来间接访问数据,在32位系统下,一个指针变量(包括void指针)始终占4个字节的空间。指针可以指向任何内存空间,但不是任何内存空间都可以通过指针去访问。 数组是数组,定义一个数组之后,编译器便根据该数组元素的类型和个...
C语言中一维数组和指针有什么区别?
C语言中,一维数组的数组名指向了这个数组的起始地址,而指针是它指向的某个东西的地址。例如定义int a[5],访问第二个元素可以用a[1],也可以用*(a+1)。当一个指针指向某个数组时,数组名和指针的作用应该是一样的。你定义的这个指针没有指向任何东西,是个野指针,不能通过类似于数组的方式...