c - 打印指针到指针

标签 c pointers

它打印3,而我想打印2。当我只增加一次时,我不明白原因。另请告诉我这是否是正确使用指针 t 指针?我刚刚编写了一个示例代码来了解指向指针的指针如何工作。

#include<stdio.h>
void main(){
int a1[] = {1,2,3,4,5,6};
int a2[] = {7,8,9,10,11,12};
int *a3 = a1;
int *a4 = a2;
int **a[2];
a[0] = a3;
a[1] = a4;

printf("%d",*(++(*a)));



}

最佳答案

您将 a 声明为 int** 数组,因此 *a 不是指向 int 的指针,而是指向 int 指针的指针。递增指针会增加其指向的数据类型的大小,因此 ++*aa[0] 处的值增加指针的大小。

你实际上存储在a[0]中的是一个指向int的指针,而不是一个指向int的指针。这是错误的,编译器应该警告你这一点。在您的体系结构中,指针似乎是 int 大小的两倍,因此增量 ++*a 将两个 int 的大小添加到指针,因此 a[0] 处的值,如果解释为 int* 而不是 int **,跳过 2。

要获得您期望的结果,请将 a 声明为 int * 数组。

int *a[2];

关于c - 打印指针到指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17540945/

相关文章:

C++ Qt 表达式 : _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) error

c - 帮助解决函数中的段错误

c - 尝试用空格拆分 C 中的字符串并使用第二个单词

c - C 编程中读取文本文件

c - C中的内存分配从1到N

c - 关于将指针集成到程序中的建议

c - 有什么区别=指针

CUDA - 大数和内存分配

c - 切换特定位

c - 指针、链表和函数