int (*a)[10];在数组 的指针中a+1为什么是指向下一个a[10]的数组?

作者&投稿:愈学 (若有异议请与网页底部的电邮联系)
C语言中的int (*a[10]) (int)是什么意思?举个小例子吧~

定义一个有10个元素的整型(int)数组,数组元素从a[0]到a[9],不包括a[10],操作方法如下:
1、新建一个工程和.c文件,输入头文件和主函数。

2、声明函数并且初始化数组,如下图所示。

3、然后通过调用函数输出二维数组的值,如下图所示。

4、然后定义一个函数,调用函数如下。

5、最后点击编译、运行,如下图所示就完成了。

一、你的题目不完整,先把题目补充完整,是不是下面这样(【】内是补充内容):
“C语言中 定义一个int a[10]数组以及 指针组(*pre)[10],如何把a组所有的地址赋【值给数组pre? 】”
如果不是,请楼主补充题目。
二、不管补充的内容对不对,题目前面的内容已经出现错误了!
因为用int (*pre) [10];定义的变量pre,并不是一个含有10个元素的指针数组,而是一个指向一维数组的指针,其本质是一个指针!所以原题目中的叙述“指针组(*pre)[10]”是错误的。
要想定义一个指针数组,应该用:int *pre[10];。注意他们的区别,对,多了一对小括号导致错误。
三、把原题目改为“C语言中 定义一个int a[10]数组以及 指针数组*pre[10],如何把a组所有的地址赋值给数组pre? ”,则所运用的语句是:
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *pre[10],i;
for(i=0;i<10;i++)
pre[i]=&a[i];
}
如果有什么问题请留言。

在汇编中a + 1才是真正的地址+1,而在C/C++中a + 1(假设a是一个指针)要取决于a指向的类型大小,(_Ty*)a + n相当于(char*)a + n * sizeof(_Ty)。比如int* a;,*a的类型为int,则此时a + 1相当于(char*)a + sizeof(int) * 1,也就是说C/C++中指针的加减运算的最小单位是指针指向的类型而不是字节。
在示例中int (*a)[10];,a指向一个数组,*a的类型为int[10],则a + 1相当于a + sizeof(int[10]) * 1,也就是让a指向下一个int[10]。
如果要让指针的最小单位为字节可以把指针强制转换为char*指针或者转换为uint64_t(32位机是uint32_t)再进行运算

a是一个数组指针,指向一个int[10]的数组,所以a+1自然指向下一个int[10]数组。


宝清县18450325932: int *a[10];什么意思 -
捷浅甲异: int *a[10]; 定义了一个指针数组,即10个int * 类型的指针 int (*a)[10]; 定义了一个指向行的指针变量,注意是”一个”指针变量,而上面的指针数组是”10个”指针变量.指向行的指针变量可以用来指向二位数组int x[N][10],a指向x即: a <==> x 或者 x[0] 或者 &x[0][0] a+1 <==> x[1] 或者 &x[1][0] a+2 <==> x[2] 或者 &x[2][0] ... 另外: *(a+i)+j <==> x[i][j] int (*)a[10]没有这种用法

宝清县18450325932: int (*a)[10] 和 int *a[10] 什么区别啊?希望能详细点! -
捷浅甲异: int (*a)[10]声明一个指向含有10个int型元素的数组的指针,仅有一个指针,这个指针指向含有10个int型元素的数组.int *a[10] 声明10个int型指针,即一个有10个int型指针的数组.

宝清县18450325932: int (*a[10])(int) 表示的是什么? -
捷浅甲异: 函数指针数组,你这样定义了10个指向了返回值为int,参数为int的函数指针.可以这样用:#include <iostream> using namespace std; int Fun( int ) { cout<< "o(∩_∩)o..." << endl; return 0; } int main() { int(*a[10])(int); a[0] = Fun; a[0](0); return 0; }

宝清县18450325932: int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思 -
捷浅甲异: 比如:#include <stdio.h>int main(){// 定义数组,包含10个int* int* b[10]; for(int i = 0; i < 10; ++i) b[i] = new int(i+1); int* (*a)[10] = &b; // a指向这个数组 for(int i = 0; i < 10; ++i){printf("%d ", *(*a)[i]); // 输出 delete (*a)[i]; // 释放}}int (*a[10])() a是...

宝清县18450325932: 在C中,怎样区分数组指针和指针数组,int(*p)a[10]到底是什么? -
捷浅甲异: 很简单,你可以看看运算符优先级那里 ()是一个圆括号运算符,在所有运算符中优先级最高 *是一个指针运算符 [ ]是一个下标运算符 而下标运算符的优先级高于指针运算符 再看你给的例子int(*a)[10]和int* a[10] 第一个int(*a)[10],首先当然就是...

宝清县18450325932: int (*a)[10] 和 int(**a)[10] 有什么区别 请高手具体解释一下 -
捷浅甲异: int (*a)[10]说明指针a是一个指向有10个int类型数组的指针, int(**a)[10]说明a是指向一个有10个int类型的数组的指针的指针, 可以看下下面的例子:#include <stdio.h> void main() { int b[2][3] = {{1, 2, 3}, {4, 5, 6}}; int (*c)[3] = b; int(**a)[3]; a = &c; } c指向了b, b[i]中的每个元素都是一个指向3个int类型的指针, 所以c++就指向了b[1],也就是元素4的地址.a又指向了c, a++的指向就无从所知了...

宝清县18450325932: int a(10) 什么意思? -
捷浅甲异: 等价于 int a = 10;

宝清县18450325932: C语言中 int (*a[10])(int); 表示什么意思?这个a是哪种指针? -
捷浅甲异: 指向函数的指针数组 (ps : 搞明白数组指针和指针数组) 这个函数数组 返回值是 int ,传入的参数是 int

宝清县18450325932: int a[10]和int *a=new int [10]的区别??什么时候用前一个?什么时候用后一个?请教各位大侠,谢谢!! -
捷浅甲异: 1.如果只是int a[10]和int* a=new int[10]比较的话,那究竟使用哪个其实无所谓,前者可能还更简单一点.只是在使用上int* a=new int[10]需要判断内存是否分配成功,以及在不用时需要使用delete[] a进行内存释放;2.如果不是a[10],而是a[...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网