1

我正在尝试利用指针变量来访问字符串的元素,并且我的代码存在问题,生成编译错误:

#include <stdio.h>
#define MAX 29

char arrayI[250];
char *ptr;

int main(void)
{
ptr = arrayI;

puts("Enter string to arrayI: up to 29 chars:\n");
fgets(arrayI, MAX, stdin);

printf("\n Now printing array by pointer:\n");
printf("%s", *ptr);


ptr = arrayI[1];     //(I set the pointer to the second array char element)
printf("%c", *ptr);  //Here is where I was wanting to use my pointer to 
                     //point to individual array elements.
return 0;
}

我的编译器哭了:

[警告] 赋值使指针从整数不进行强制转换 [默认启用]

我没有看到我的指针在哪里被分配给整数数据类型?有人可以解释为什么我尝试实现指针变量失败了吗?谢谢大家!

4

4 回答 4

3
#include <stdio.h>
#define MAX 29
// An array declaration that can hold upto 250 characters 
char arrayI[250];
// A pointer variable that can hold the address of a character
char *ptr;
int main(void)
{
   // Assigning the array's base address to the pointer variable
   ptr = arrayI;
   puts("Enter string to arrayI: up to 29 chars:\n");
   fgets(arrayI, MAX, stdin);

   printf("\n Now printing array by pointer:\n");
   // Printing the entire array
   printf("%s", ptr);

   // Now modifying the pointer variable to point to the second character
   ptr = &arrayI[1];     
   // Printing the second character from left in the array
   printf("%c", *ptr);  
}

假设内存分配如下:

假设基地址从 4000 开始。

      +----------+
4000  |          |    arrayI[0]  
      +----------+
4001  |          |    arrayI[1]
      +----------+
4002  |          |    arrayI[2]
      +----------+
           .
           .
           .
      +----------+
4249  |          |    arrayI[249]
      +----------+

Now ptr = arrayI => 4000

printf("%s",ptr);  //Print the entire string starting from address 4000

Now ptr = &arrayI[1] => 4001

printf("%c", *ptr); // Print valueAt(ptr) => valueAt(4001) => second character of arrayI
于 2013-11-11T03:55:44.277 回答
1

这段代码:

ptr = arrayI[1];     //(I set the pointer to the second array char element)
printf("%c", *ptr);

被打破。ptr是 type 的变量char*,您正试图将 a 分配char给它。您想分配 to 的地址,arrayI[1]因此ptr您应该使用ptr = &arrayI[1];.

编辑——正如催化剂所指出的,你的第二个 printf 应该如下所示:)printf("%s", ptr

于 2013-11-11T03:51:31.650 回答
0

我相信问题出在“ptr = arrayI[1]”这一行。ptr 是 char* 类型,而 arrayI[1] 是 char 类型(在 C 中与 int 相同,因此是编译器消息)。修复应该将此行更改为 *ptr = arrayI[1];

于 2013-11-11T03:52:48.983 回答
0

我想你会需要这个

ptr = arrayI;

puts("Enter string to arrayI: up to 29 chars:\n");
fgets(arrayI, MAX, stdin);

printf("\n Now printing array by pointer:\n");
printf("%s", ptr);


ptr = arrayI+1;     //(Where 1 is the sizeof char)
printf("%c", *ptr)

ptr是一个指针,arrayI也是一个指针,但arrayI[1]它是一个字符,也就是整数。

于 2013-11-11T03:57:04.547 回答