【问题标题】:How can you point in memory to 3 locations if you are having an int pointer? [closed]如果你有一个 int 指针,你怎么能在内存中指向 3 个位置? [关闭]
【发布时间】:2018-01-26 18:02:54
【问题描述】:

我想知道如果我有一个 int 指针,你怎么能指向内存中的 3 个位置。如果您有一个指向整数的指针:int * p ; int i ;p=&i。(如果您认为 int 指向 2 个位置而 char 仅指向一个)您只想指向内存中的 3 个位置。你做什么工作 ?你能把它转换成 char* 之后再增加它吗?

【问题讨论】:

  • “指向 3 个位置”是什么意思? “指向 2 个位置”或“指向一个位置”是什么意思?你的意思是类型的大小?正如sizeof返回的那样?请编辑您的问题并详细说明并提供更多详细信息。也请read about how to ask good questions.
  • 指针只指向一个位置。
  • @Someprogrammerdude 我认为提问者指的是对齐。
  • 我认为您严重混淆了 point to 的含义与其他内容。

标签: c embedded


【解决方案1】:

您将所指向对象的大小与指针混淆了。指针指向内存中的单个位置(例如地址 0x12300)。可能是您在该位置有一个 char(一个 8 位值),因此其他一些变量位于地址 0x12301,或者它可能是一个 16 位值,在这种情况下,您的程序将被编译为使用该值0x12300 处的 8 位和 0x12301 处的 8 位作为单个值。或者可能是您有一个数组(任何大小——3 个字符或 1000 个长字——没关系)。但是无论它指向多少内存,指针本身都只会保存值 0x12300。正是编译器(以及它生成的机器代码)导致指针取消引用的处理方式不同,具体取决于它们所指向的内容。

【讨论】:

    【解决方案2】:

    指针一次只指向一个变量地址。在您的情况下,数据类型是 int,因此指针将仅指向 2 字节或 4 字节内存,具体取决于编译器(16 位或 32 位)。

    【讨论】:

    • int * p;诠释我;字符 c; p = &i; charptr = (char)p; ptr = & c; printf("%p\n", ptr);点=点+2; printf("%p\n", ptr);我的意思是我想
    • 我的意思是我想通过强制转换来使用 char 指针而不是 int 指针。因为如果我只使用 int,我就无法在不转换为 char 的情况下移动到 3 个位置。 Char 指针在 1 字节上,而 int 指针取决于架构,sizeof(int) 可以是 2,4 或更多。
    • 那是正确的..但是是什么让你使用指针指向三个内存位置。你也可以使用 void 指针,这样就不需要强制转换,但你不能使用 void 指针检索该特定位置的值.
    【解决方案3】:

    您的问题措辞有些不合常规,但我猜您的意思是指向三个连续字节的指针?

    char data[3] ;
    char* p = data ;
    
    p[2] = 3 ; // same location as data[2]
    *(p + 1) = 2 ; // alternative to p[1]
    

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2015-09-12
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多