在C中创建指针

时间:2015-02-25 15:10:42

标签: c

我使用的是Ubuntu 14.10和GCC。我试图创建一个无符号整数类型的指针,但我收到此消息:

Segmentation fault (core dumped)

这是我的代码。我使用gdb并认为错误与我的printf语句有关:

#include <stdio.h>

int main() {
  int i;
  char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
  int int_array[5] = {1, 2, 3, 4, 5};

  unsigned int hacky_nonpointer;
  hacky_nonpointer = (unsigned int) char_array;

  for (i = 0; i < 5; i++) {
    printf("[hacky_nonpointer] points to 0x%08x which contains the  char '%c' \n",
    hacky_nonpointer, *(char *(hacky_nonpointer)));
    hacky_nonpointer = hacky_nonpointer + sizeof(char);
  }

  hacky_nonpointer = (unsigned) int_array;

  for (i = 0; i < 5; i++) {
    printf("[char pointer] points to %08x, which contains the integer %d\n",
    hacky_nonpointer, *((int *)hacky_nonpointer));
    hacky_nonpointer = hacky_nonpointer + sizeof(int);
  }

  return 0;
}

2 个答案:

答案 0 :(得分:2)

unsigned int可能不足以容纳指针。如果可用,您应该使用uintptr_t stdint.h,如果没有,则size_t

答案 1 :(得分:0)

首先是什么:

points to 0x%08x

你的意思可能是%p

*(char *(hacky_nonpointer)));

那就是下一次失败

理所当然地*((char *) hacky_nonpointer));

这里你需要输入空格:

*((int *)hacky_nonpointer));

理所当然地:

*((int *) hacky_nonpointer));

这里没有空格:

'%c' \n"

理所当然:

'%c'\n"

您的代码必须在更正后运行