如何摆脱此警告?我认为它可以正常运行,但是我不确定。我是编程的新手,想在指针上进行更多的练习。我正在编写一个程序,该程序采用variableName [i]的当前内存地址,并以正确的偏移量打印出来,以计算variableName包含的字符串的大小。
cc testing.c -o testing
testing.c: In function ‘main’:
testing.c:10:6: warning: assignment to ‘int *’ from
incompatible pointer type ‘char (*)[15]’ [-Wincompatible-
pointer-types]
ptr = &variableName;
^
代码如下:
#include <stdio.h>
#define TESTING 15
int main()
{
char variableName[TESTING] = "Hello World";
int *ptr, stringSize, inc;
ptr = &variableName;
inc = *ptr;
stringSize = sizeof(variableName);
for (int i = 0; i < 5; i++) {
inc = inc + stringSize;
printf("variableName[%d]: '%s'\t0x%x\n", i, variableName, inc);
}
printf("\nAddress to Pointer *ptr: 0x%x\n", *ptr);
return 0;
}
非常感谢您!
答案 0 :(得分:1)
我认为指针和要存储其地址指针的变量都应为同一数据类型,在这种情况下,指针应为char类型;即char * ptr
答案 1 :(得分:1)
这里有很多问题。
您的警告来自以下事实:您声明ptr
为指向int
(int *
)的指针,但是表达式&variableName
的类型为“指向15- char
”或char (*)[15]
的元素数组。如果您想ptr
指向variableName
数组的各个元素,那么您想将其声明为指向 char
的指针:
char *ptr;
,您可以使用任一方法将其设置为指向数组的第一个元素
ptr = &variableName[0];
或
ptr = variableName; // no & operator
除非它是sizeof
或一元&
运算符的操作数,否则它是用于在声明中初始化类型为 expression 的声明中的字符数组的字符串文字。 “ T
的数组”将被转换(“衰减”)为“ T
的指针”的表达式,该表达式的值将是第一个元素的地址。
请注意,表达式&variableName
,variableName
和&variableName[0]
都产生相同的 value (数组的地址与的地址相同)。它的第一个元素),但是表达式的 types 不同(分别为char (*)[15]
,char *
和char *
)和类型很重要,尤其是在使用指针时算术。
您的代码还有其他问题,但这应该使您摆脱了第一关。