这些类型如何(int(* ptr)[3])= a; (其中a = = int a [] [3] = {1
发布时间:2020-12-16 10:14:11 所属栏目:百科 来源:网络整理
导读:对于以下代码: #include stdio.hint main(){ int a[][3] = {1,2,3,4,5,6}; int (*ptr)[3] = a; printf("%d %d ",(*ptr)[1],(*ptr)[2]); ++ptr; printf("%d %dn",(*ptr)[2]); return 0;} 应该打印什么?我期待: 2 3 3 4 但输出是: 2 3 5 6 我期待输出为2
对于以下代码:
#include <stdio.h> int main() { int a[][3] = {1,2,3,4,5,6}; int (*ptr)[3] = a; printf("%d %d ",(*ptr)[1],(*ptr)[2]); ++ptr; printf("%d %dn",(*ptr)[2]); return 0; } 应该打印什么?我期待:
但输出是:
我期待输出为2 3 3 4 解决方法
ptr的类型为int(*)[3]:
int (*ptr)[3] ptr的类型指定了如何在ptr上执行指针airthmetic. 对于以下更一般的情况: int *p; // ... int (*ptr)[N] = p; ptr += M; // same address as p[M * N] 增加M中的指针会导致M * N * sizeof(int)的地址增量,而不仅仅是M * sizeof(int),正如您所期望的那样. 这是指针算法的工作原理,因为ptr指向的元素类型是int [N]而不是int. 声明后ptr;执行后,ptr指向a的第三个元素.增量是按int类型的三个元素而不是单个元素的步长完成的,也就是说,在你的情况下,N = 3. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |