如何访问给定指针的数据?

时间:2019-01-26 03:09:03

标签: c string pointers

我正在尝试学习C语言,并且无法从数据指针访问数据。

我有示例代码:

// character array for string
char mystring[] = "Hello";

// store mystring's pointer
int p = *mystring;

printf("String to pointer is %d\n":, p);
>> String to pointer is: 1819043144

// trying to access data from pointer p
printf("%s",&p);
>> H

为什么当我尝试使用&运算符从指针p访问数据时,为什么只打印“ H”?

1 个答案:

答案 0 :(得分:3)

表达式&pmystring无关。 p是一个整数变量,而&p是该变量的地址。

int p = *mystring;

等效于:

int p;
p = *mystring;

*mystringmystring数组的第一个元素,它是字符'H'。所以这等效于:

int p = 'H';

您的变量初始化只是复制mystring的第一个字符并将其放入p中。还将其从char转换为int

当您尝试使用p格式打印%s时,会导致未定义的行为,因为%s要求相应的参数是指向以空值结尾的字符串的指针,并且您已经为它指定了一个指向int的指针。

将此代码与您的代码进行比较:

int *p = mystring;
printf("%s", p);

这更接近正确,因为现在p是一个指针,并且确实指向该字符串。它不是任何东西的副本。但这仍然是不正确的,因为%s的参数必须是char *,而不是int *。因此,您需要对其进行转换:

printf("%s", (char *)p);

但是最合适的方法是首先声明p为正确的指针类型:

char *p = mystring;
printf("%s", p);