创建一个指向数组的void指针
时间: 2023-10-05 22:10:16 浏览: 34
可以这样创建一个指向数组的`void`指针:
```c
int arr[5] = {1, 2, 3, 4, 5};
void *ptr = arr;
```
这里将`arr`数组的首地址赋值给了`ptr`指针,由于`void`指针可以指向任何类型的数据,所以可以这样赋值。
需要注意的是,由于`void`指针不知道指向的具体数据类型,所以无法进行指针运算和解引用操作。如果要使用`ptr`指针访问数组元素,需要将其转换为指向具体类型的指针,例如:
```c
int *p = (int *)ptr;
printf("%d\n", *p); // 输出1
```
相关问题
c++指向函数数组的指针
C++中可以定义指向函数数组的指针,其语法如下:
```cpp
返回类型 (*指针变量名[数组长度])(参数列表);
```
其中,指针变量名是指向函数数组的指针变量名,数组长度是函数数组的长度,返回类型是函数的返回类型,参数列表是函数的参数列表。
例如,定义一个指向函数数组的指针,该函数数组包含两个函数,每个函数都有一个int类型的参数,返回值为void:
```cpp
void func1(int);
void func2(int);
void (*pFunc[2])(int) = {func1, func2};
```
在上面的代码中,pFunc是一个指向函数数组的指针,它包含两个元素,每个元素都是一个指向函数的指针,这两个函数都有一个int类型的参数,返回值为void。
用指向数组的指针求二维数组各行元素之和
可以使用以下代码来实现用指向数组的指针求二维数组各行元素之和:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 4
void row_sum(int arr[][COLS], int rows);
int main(void)
{
int array[ROWS][COLS] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
row_sum(array, ROWS);
return 0;
}
void row_sum(int arr[][COLS], int rows)
{
int sum;
for(int i = 0; i < rows; i++)
{
sum = 0;
for(int j = 0; j < COLS; j++)
{
sum += *(*(arr + i) + j);
}
printf("Row %d sum: %d\n", i+1, sum);
}
}
```
解释:
用指向数组的指针 `*(*(arr + i) + j)` 来访问二维数组中的元素,外层循环为行数,内层循环为列数,计算每一行的元素之和并输出。