c - 理解C中指针的赋值

标签 c arrays pointers

#include<stdio.h>
int main( ) 
{ 
    int s[5][2] = { { 1234, 56 }, { 1212, 33 }, { 1434, 80 }, { 1312, 78 } } ;
    int ( *p )[2];
    int i, j, *pint ;
    for ( i = 0 ; i <= 3 ; i++ ) 
    { 
        p = &s[i] ;
        pint = (int *)p ;
        printf ( "\n" ) ; 
        for ( j = 0 ; j <= 1 ; j++ ) 
            printf ( "%d ", *( pint + j ) ) ; 
    } 
    return 0;
}

这是输出:

1234 56
1212 33 
1434 80 
1312 78

为什么 int(*p)[2] 中使用 2 。我们不能使用 3,4 或任何其他数字吗? (int *)p 是什么意思? 还有p=&s[i];的意义是什么?在代码中?

最佳答案

因为它是指向两个 int 数组的指针,并被分配了 s 的元素,这些元素也是两个 int 数组(必须匹配该数组的最后一个维度)。

这里实际上没有必要,因为它只是立即分配给 pint 的临时变量,因此可以直接从 s[i] 分配给 pint.

另外你问的表达是错误的:

    pint = (int *)p ;

应该是:

    pint = *p ;

这在语义上是正确的。第一个只是因为指针指向数组开始的同一内存,但它很容易出错,因为编译器没有检查。

关于c - 理解C中指针的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159155/

相关文章:

c - 获取 C 中字符串的最后一个标记

c - 使用 GIO 处理文件

arrays - 通过对其他两个数组的所有元素应用二元运算在 Swift 中创建一个数组

c - c 中运算符的地址和左值

c - 我的指针和动态分配的实现是否正确?

c - 终端模拟器中的随机字符

javascript - 在 Javascript 中将数组传递给 Web 方法

android - 尝试将 mutableListOf<String> 存储到 SharedPreferences 但无法设置默认值

c - 在 C 中使一个指针指向另一个指针所指向的内容

c - glibc 检测到 realloc() : invalid next size: 0x