1 1.
2 char arr[100];
3 sizeof(arr)/sizeof(arr[0]);
4 以上式子能求出数组的长度
5 void funtion(char *str)
6 {
7 int m = sizeof(str)/sizeof(str[0]);
8 };
9 通过字符指针传递数组的首地址,
10 为什么不能在函数体内实现求数组长度?
11 以上实例中
12 数组名难道不仅仅包含字符型指针含义?
数组和指针的区别:
数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char a[];那么如果出现a = a+1;这是编译都通不过的错误。而对于一个普通的指针是可以的,再比如有数组char a[];那么再定义一个char *p = a;然后再用p = p+1是合法的,这表示让指针p指向&a[1]。
它们的第二个区别是:每当用到数组名这个指针的时候,系统都会传入数组的信息,而普通的指针只是一个4字节的整数,例如:
这时的运行结果是“5##4”
谢谢先
第一条可以理解成:
数组名是: char const * 型指针 或者 说是 指针常量
第二条有没有什么官方的文档或者说明做为佐证呢?
其实数组名不等同于指针,但是还可以有部分数组的用法,从第二条可以看出,用sizeof计算的值不同
用编译环境实践一下,就能看出了。
c语言数组和指针的区别
C语言中,数组和指针是两个不同的概念,它们之间存在显著的区别:定义与本质:数组是一种数据结构,用于存储固定数量的同类型元素的连续内存块。而指针是一个变量,其值是一个内存地址,用于指向内存中的某个位置。内存分配:数组在编译时分配内存空间,其大小在声明时确定且固定不变。指针本身只占用固定...
C语言中,指针和数组的区别和联系?
区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,...
指针和数组的区别
指针和数组的区别是指针变量用于保存数据的地址,数组用于直接保存数据。指针一般指向一个函数或一个变量,在信息工程中是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中的寄存器(Register)。指针一般出现在比较近机器语言的语言,如汇编语言或C语言。面向对象语言如Java一般避免用指针,而是...
指针与数组
数组名所代表的就是该数组最开始的一个元素的地址,在计算数组元素a[i]的值时,C语言实际上线将其转换为 (a+i)的形式,然后再进行求值。他们是等价的,可以将指针后面加下标,比如pa[i]和 (pa+i)是等价的,但是指针比单纯的数组名要快一些。 有一点很重要的,数组名和指针之间有一个不同之...
C语言中一维数组和指针有什么区别?
C语言中,一维数组的数组名指向了这个数组的起始地址,而指针是它指向的某个东西的地址。例如定义int a[5],访问第二个元素可以用a[1],也可以用*(a+1)。当一个指针指向某个数组时,数组名和指针的作用应该是一样的。你定义的这个指针没有指向任何东西,是个野指针,不能通过类似于数组的方式...
C语言中,数组和指针定义在内存方面的区别在哪?
1,指针变量用于保存数据的地址,数组用于直接保存数据(当然你可能见过,数组的每个元素是指针,不过,一组指针也是数据,它们各自的内容才是地址)2,访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址 3,指针通常用于动态数据;数组通常用于固定...
C中数组和指针到底是否相同?
4.理解char *p="abcde"和char str[]="abcde"的区别。C语言标准对此作了说明:规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针; 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&取数组的地址规则2:下标总是与指针的偏移量相同;规则3:在函数参数的声明中,数组名被编译器当做指向...
C语言指针数组指针怎样理解?
数组指针,对于一维数组来说就是数组名 故对于一维数组来说,数组名是第一个元素的指针,而元素本身也是指针,故数组名是指向指针的指针。例如: int * p = &a; int ** q = &p;则p中储存的是整形变量a的地址,而指针p自身也是变量(指针变量通常占4个字节),故q中储存的就是变量p的地址。q...
C语言数组指针问题?
首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是c语言的精髓。比如你定义了int p,a[10];并且让p=a;,这个操作叫做指针p指向了数组a,其本质是给p这个变量付了一个值,就是数组a的地址,也是a[0]的地址,也是a本身里面存储的...
从汇编语言的角度看清数组名和指针变量的区别
这两条语句似乎没啥区别,都是初始化了一个字符串。但是,经过上面的分析可以看出这两条语句的区别是很明显的。字符数组的初始化其实是定义了6个字节的内存空间, 然后把”hello”的每个字符依次放进去,a[0]=’h’,a[1]=’e’。。。而指针变量的初始化是,先定义了比如2个字节的单元,然后把常...