首页 > 编程知识 正文

c语言取值运算符后面是数组,C语言对数组元素进行运算

时间:2024-04-24 11:43:13 阅读:333907 作者:PBSA

本文目录一览:

C语言数组基本问题

第一:

为什么p=s非法:因为C++数组中数组名字相当于是指向数组第一个元素的指针

所以 s相当于取一个指针的地址,你必须用 指向指针的指针int **p = s。这样才能保存。

第二:

而p=s[i]合法

s[i]是数组中的第i个元素的值。所以你可以用s[i]取到的是数组第i个元素的地址, int *p = s[i],用指针指向第i个元素地址。

怎么理解C语言的取值运算符“*”

我也是初学,我试试我的解释,你要当所有多维数组当成一维数组来看,因为编译器在解读数组时,就是这样的,首先你说的a是个二维数组,说是二维其实在内存中还是以一维形式存储,也就是线性存储,你可以想象一维数组在内存中是一个个排序的,二维数组是一段段排序的,每段就是一行,而编译器在解读二维数组时,会先把一行看成一个大元素,所以当时使用*a时,实际就是返回a第一行(这个大元素)存储的值,而这个值也就是一维数组的地址值,当使用a+1时,就是行指向,若想指向行中的小元素,必须要使用*返回一次,得到一维数组后,这时候+1就是在按小元素指向,若想返回这个元素的值,就要再使用一个*取值

c语言中如何使返回值为数组

1、注意C/C++不能直接返回一个数组。这是由于在C/C++中,数组不是一种类型,因此不能被直接返回。

2、在C/C++中,一般有两种方法来返回一个数组。

第一种方法:

返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*动态开辟空间*/

a=calloc(10,sizeof(int));/*赋值*/for(i=0;i10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10];

/*函数返回指向数组的指针*/

b=retArray();

/*打印第一个元素*/

printf("%d/n",(*b)[0]);

/*释放空间*/free(b);return 0;}第二种方法:

如果你不喜欢用指针的形式返回数组,那么可以采用返回一个结构的形式。这种形式相对较安全,可以避免忘记释放指针而造成内存泄露,也可以避免访问悬挂指针造成的错误。但缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存。

例子如下:#includestruct tag{int a[10];}x,y;struct tag retArray(){int i=0;for(i=0;i10;i++)

x.a[i]=i;return x;}int main(){struct tag y=retArray();

printf("%d/n",y.a[3]);return 0;}注意:(1)在返回指针时要切记要避免内存泄露和访问悬挂指针。

(2)很多人认为指针和数组等价的,这是错误的。int (*a)[10]和int b[10]两者是不能直接用a=b来赋值的。在数组和指针作为函数参数传递时,二者可以认为等价,这是因为数组会被转化为指针来传递。

(3)返回多维数组方法类似。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。