c语言-C语言 数组问题 这俩有什么区别

问题描述

C语言 数组问题 这俩有什么区别
int (*a)[10]; 与int a [10]的区别
两者的return a;分别返回的是什么
还有两者的元素怎么引用

解决方案

这两者很不同。

int a[10];这里的a是一个常量,表示数组的首地址。数组存储的是int型数据。

int (*a)[10]; 这里的a是一个指针变量,指向一个数组,数组存储的是10个int型数据。

解决方案二:
一个是指针,一个是数组,用sizeof求值,以及free的时候都是不同的。

解决方案三:
int (*a)[10]; 中的a是一个指向整形数组的指针。int a【10】就是一个容量为10的int型数组
举例子说明:
void main()
{
int b[2][3] = {{1 2 3} {4 5 6}};
int (*c)[3] = b;
}
c指向了b b[i]中的每个元素都是一个指向3个int类型的指针, 所以c++就指向了b[1],也就是元素4的地址。

解决方案四:
int (*a)[10]是数组指针
int a [10]是数组

引用:
(*a)[n]
a[n]

解决方案五:
int a[10] :数组指针。数组a里存放的是10个int型指针 int (*a)[10] :a是指针,指向一个数组。此数组有10个int型元素 int *a[10] 先找到声明符a然后向右看,有[]说明a是个数组,再向左看,是int *,说明数组中的每个元素是int *。所以这是一个存放int指针的数组。 int(*a)[10] 先找到声明符a被括号括着,先看括号内的(优先级高),然后向右看,没有,向左看是,说明s是个指针,什么指针?在看括号外面的,先向右看,有[] 是个数组,说明a是个志向数组的指针,再向左看,是int,说明数组的每个元素是int。所以,这是一个指向存放int的数组的指针。 例 int *p[10]; int (*q)[10]; printf( ""*p[10]: %dn "" sizeof(p)); printf( ""(*q)[10]: %dn "" sizeof(q)); 结果是: *p[10]: 40 //说明p是一个数组名 (*q)[10]: 4 //说明q是一个指针

解决方案六:
其实主要的区别就是常量和变量把,我补充一下其他人说的,不知道对不对

解决方案七:
一个是指针,一个是数组啊

解决方案八:
其实可以看作 (int*) a[10]和int a[10],第一种数组里每个元素都是一个整型指针,第二个数组里每个元素都是一个整形。

解决方案九:
数组指针 数组 返回都是指向第一元素的地址.....

解决方案十:
关于怎么识别这类c语法结构(char * (*c[10]) (int **p) )到底是指针还是函数还是数组或其它),请参见c专家编程的 第三章。

时间: 2024-11-05 13:45:29

c语言-C语言 数组问题 这俩有什么区别的相关文章

c语言-java的二维数组和C语言二维数组的储存结构有什么区别?

问题描述 java的二维数组和C语言二维数组的储存结构有什么区别? java的二维数组和C语言二维数组的储存结构有什么区别?,数据结构有什么区别吗?有人说java的数组在内存中存储不是连续的,, 解决方案 java二维数组的存储在内存中不一定连续.二维数组是一维的一维,也就是树形结构. 解决方案二: 个人认为是连续的,要支持随机访问,当然如果内存真的不是连续的,那就是vm的事情了 解决方案三: C语言是连续的,Java应该也是连续的吧,这个问题还真没深究过.

C语言二维数组指针问题

问题描述 C语言二维数组指针问题 如下两个代码,第一个代码会停止运行,而第二个能得出正确结果...这两个代码的不同之处不应该是等价的吗?为什么会造成这种完全相反的结果? #include<stdio.h> void main() { void ave(float *p,int m); float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}}; ave(*a,12); } void ave(float *p,int m) { float

指针-c语言中字符数组初始化问题

问题描述 c语言中字符数组初始化问题 字符数组初始化1: char str[]=""123"";//不报错2: char str[4]; str=""123"";//不能将const char[4] to char[4]字符指针初始化1: char *str=""123"";//不报错2: char *str; str=""123"";//不报错求

Java语言入门教程(十一):Java语言中的数组

在教程(十)中,我们学习了Java类之间常见的两种关系,即关联和依赖. 如果A关联或依赖B,如果仅从A到B这个方向看,从数量上,可能有1对1和1对多 两种可能.面向对象的应用,都是映射现实世界的对象以及对象之间的关系的, 仔细考察一下我们身边的情况,对象与对象之间如果存在关联或依赖,其实1对 多的关系更为常见.如,一个部门有多个员工,一个学员有多个院系,一个人有 多张毕业证书- 上篇文章中的例子,学生只能选择一门免费课程学习,如果培训中心加大优 惠力度,每个学生最多可以选择3门课程学习,应该如何

C语言中全局数组和局部数组的问题

 今天同学遇到一个在C语言中全局数组和局部数组的问题,卡了许久,我也没有第一时间看出问题,现在把问题梳理一下,并给出解决方案. 问题描述: 在全局声明的数组与在局部声明的数组有着不同的效果. 首先来看一个程序: 代码如下: #include <stdio.h> #include <stdlib.h> #define MAX 10 char a[MAX]; int main() { int i; char b[MAX]; char *c=(char *)malloc(MAX * si

C语言中的数组和指针汇编代码分析实例

  这篇文章主要介绍了C语言中的数组和指针汇编代码分析实例,本文用一则C语言例子来得到对应的汇编代码,并一一注解每句汇编代码的含义,需要的朋友可以参考下 今天看<程序员面试宝典>时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下C语言背后的汇编,可能很多人只注重C语言,但在实际应用当中,当出现问题时,有时候还是通过分析汇编代码能够解决问题.本文只是为初学者,大牛可以飘过~ C源代码如下: 代码如下: #include "stdafx.h" int

c语言-C语言二维数组下标越界--却能给越界的下标赋值 和输出

问题描述 C语言二维数组下标越界--却能给越界的下标赋值 和输出 编译器:dev-c++ int iArray[3][4]; iArray[3][4]=1000; printf("%d",iArray[3][4]); 改变 iArray[3][4]的值为1000 输出的结果仍然为1000 请问这个是什么原因呢? 我是直接给越界的下标进行了赋值 以前以为只要是下标越界了 输出的都是无意义的数字 其实那是因为没有给越界的下标赋值 对吗 越界的下标为什么还能正常使用呀 解决方案 使用越界的数

c语言-C语言字符串数组定义问题

问题描述 C语言字符串数组定义问题 #include int main() { char *ptr[10]; 为什么这样运行时会出错? gets(ptr[0]); } #include int main() { char ptr[10][20]; 而这样运行时则没有问题? gets(ptr[0]); } char *p[10] 与 char p[10][20] 之间有什么不同? 还是说在这里是gets()函数用错了? 万分感谢! 解决方案 哥们,你的第一个定义的是数组指针,第二定义的是一个二维数

c语言-c 语言 字符串和 数组

问题描述 c 语言 字符串和 数组 char * a = "abc"; char a[4] = "abc"; 以上有什么区别和联系 解决方案 char * a = "abc"; 其实是 char 一个你看不见的变量[] = "abc"; char *a = 一个你看不见的变量; 解决方案二: 前者是一个字符指针,定义时仅分配了指针变量的空间,该指针指向一个字符串常量"abc"的首地址,a可修改(可做左值)但