相关疑难解决方法(0)

508
推荐指数
8
解决办法
5万
查看次数

为什么我[arr]和C中的arr [i]一样有更大的数据类型?

众所周知,如果你像arr[i]在C中那样访问数组元素,你也可以访问元素i[arr],因为这些只是归结为*(arr + i)并且加法是可交换的.我的问题是为什么这适用于大于的数据类型char,因为sizeof(char)是1,而对我来说,这应该只用一个char来推进指针.

也许这个例子让它更清晰:

#include <string.h>
#include <stdio.h>

struct large { char data[1024]; };

int main( int argc, char * argv[] )
{
    struct large arr[4];
    memset( arr, 0, sizeof( arr ) );

    printf( "%lu\n", sizeof( arr ) ); // prints 4096

    strcpy( arr[0].data, "should not be accessed (and is not)" );
    strcpy( arr[1].data, "Hello world!" );

    printf( "%s, %s, %s\n", arr[1].data, 1[arr].data, (*(arr+1)).data );
    // prints Hello world!, Hello …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers pointer-arithmetic

10
推荐指数
2
解决办法
1597
查看次数

为什么指向整数的指针增加4个字节?

可能重复:
有关指针增量的问题

当我增加一个int指针时,它的地址有4个字节的间隙.为什么会这样?为什么int指针需要4个字节来存储而char需要2个字节?

c c++ memory pointers increment

1
推荐指数
1
解决办法
4174
查看次数

C指针:解释程序概念

我正在学习指针基础知识.请查看我的示例代码并告诉我发生了什么.

void main()
{
     int i, *j;
     i = 2;
     j = i;
     printf("%d", j);
     printf("\n%d", j + 1);
     printf("\n%d", j + 2);
}
Run Code Online (Sandbox Code Playgroud)

我的输出是

2 6 10
Run Code Online (Sandbox Code Playgroud)

请解释一下..

c pointers

-4
推荐指数
1
解决办法
101
查看次数