我正在学习 C,C 是我的第一门编程语言。我先添加代码。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int row = 3, col = 2;
int(*ptr)[2] = (int(*)[2])malloc(sizeof(int) * row * col);
if (!ptr) exit(1);
printf("%d", sizeof(*ptr[0]));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
4
也许,ptr[0]是指针或数组。我应该将其视为ptr[0]数组吗?
int (*ptr)[2]声明ptr为一个指向两个数组的指针int。
这意味着*ptr是一个包含两个的数组int。ptr[0]实际上与 相同*ptr,因此它也是一个由两个组成的数组int。
根据定义,ptr[0]意味着先加零ptr,然后应用*。添加零不会改变该值,因此ptr[0]有效*ptr。
设置ptr为(int (*)[2]) malloc(sizeof(int) * row * col);将其设置为指向可用作 3 个 2 数组的内存int(因为rowis 3 和colis 2)。所以这三个数组是ptr[0]、ptr[1]和ptr[2]。
由于其中每一个都是一个由两个组成的数组int,因此它们每个都有两个元素,可以通过ptr[0][0], ptr[0][1], ptr[1][0], ptr[1][1], ptr[2][0], 和来访问ptr[2][1]。
请注意,下标运算符[ \xe2\x80\xa6 ]可以与指针或数组一起使用。无论哪种情况,E1[E2]都定义为*((E1) + (E2))。对于指针,此加法以指向的类型为单位进行操作。当E1是指向两个数组的指针时int,添加 1 或 2 会生成一个指针,该指针指向内存中进一步的 1 个或 2 个两个数组int(只要算术保持在适用空间的范围内)。当E1是数组时,它会自动转换为指向其第一个元素的指针,然后像指针一样进行算术。
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |