指针数组(int *a[])和数组指针 (int (*a)[])
时间: 2023-06-17 16:08:04 浏览: 174
指针数组(int *a[])是一个数组,其元素都是指向int类型的指针,可以将其看作是一个二维数组,第一维是数组元素的个数,第二维是指针指向的数据类型。
数组指针(int (*a)[])是一个指针,指向一个int类型的数组。可以将其看作是一个一维数组,该数组的元素是int类型的数组。
需要注意的是,指针数组和数组指针的声明方式不同,指针数组的声明方式为int *a[],而数组指针的声明方式为int (*a)[]。
相关问题
c语言中,设置指针int *p和数组 int a[12],之后在使用中,p=a和p=&a有什么区别
在C语言中,指针和数组是两个不同的概念。指针是一个变量,它存储另一个变量的地址;而数组是一组相同类型的变量,它们在内存中是连续存储的。
设置指针int *p和数组int a[12]的语法分别为:
```c
int *p;
int a[12];
```
将指针p指向数组a的首地址可以使用以下语法:
```c
p = &a[0]; // 或者 p = a;
```
这里使用了数组名a,因为数组名本身就代表了数组的首地址。所以,上面的语句也可以写成p=a。
如果要将整个数组a的内容复制到指针p中,可以使用以下语法:
```c
p = a;
```
这里的p和a都是指向数组首元素的指针。因此,将p指向a的首地址和将p指向a的首元素是等效的。
如果想让指针p指向数组a的第n个元素,可以使用以下语法:
```c
p = &a[n]; // 或者 p = a + n;
```
这里的&a[n]表示数组a中第n个元素的地址,而a+n表示数组a中第n个元素的地址偏移量。两者等效。
如果将p赋值为a,那么p就指向了数组a的首地址。而如果将p赋值为整数值,比如p=3,那么p就指向了内存地址为3的位置,这很可能会导致程序崩溃或者出现意想不到的结果。因此,将指针赋值为不合法的地址是不安全的。
分别解释如下指针和数组的组合 int a; int *a; int **a; int a[10]; int *a[10]; int (*a)[10]; int *a(int); int (*a[10])(int);
1. int a;:定义了一个名为a的整型变量。
2. int *a;:定义了一个名为a的指针变量,该指针变量可以指向整型变量。
3. int **a;:定义了一个名为a的指向指针的指针变量,该指针变量可以指向一个指针,该指针指向一个整型变量。
4. int a[10];:定义了一个名为a的整型数组,数组长度为10。
5. int *a[10];:定义了一个名为a的指针数组,数组长度为10,每个数组元素都是一个指向整型变量的指针。
6. int (*a)[10];:定义了一个名为a的指向整型数组的指针变量。
7. int *a(int);:定义了一个名为a的函数,该函数接受一个整型参数并返回一个指向整型变量的指针。
8. int (*a[10])(int);:定义了一个名为a的指针数组,数组长度为10,每个数组元素都是一个指向函数的指针,该函数接受一个整型参数并返回一个整型值。
阅读全文