练习指针,如何摆脱此警告?

时间:2018-08-19 02:26:30

标签: c pointers

如何摆脱此警告?我认为它可以正常运行,但是我不确定。我是编程的新手,想在指针上进行更多的练习。我正在编写一个程序,该程序采用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;
}

非常感谢您!

2 个答案:

答案 0 :(得分:1)

我认为指针和要存储其地址指针的变量都应为同一数据类型,在这种情况下,指针应为char类型;即char * ptr

答案 1 :(得分:1)

这里有很多问题。

您的警告来自以下事实:您声明ptr为指向intint *)的指针,但是表达式&variableName的类型为“指向15- char”或char (*)[15]的元素数组。如果您想ptr指向variableName数组的各个元素,那么您想将其声明为指向 char 的指针:

char *ptr;

,您可以使用任一方法将其设置为指向数组的第一个元素

ptr = &variableName[0];

ptr = variableName; // no & operator

除非它是sizeof或一元&运算符的操作数,否则它是用于在声明中初始化类型为 expression 的声明中的字符数组的字符串文字。 “ T的数组”将被转换(“衰减”)为“ T的指针”的表达式,该表达式的值将是第一个元素的地址。

请注意,表达式&variableNamevariableName&variableName[0]都产生相同的 value (数组的地址与的地址相同)。它的第一个元素),但是表达式的 types 不同(分别为char (*)[15]char *char *)和类型很重要,尤其是在使用指针时算术。

您的代码还有其他问题,但这应该使您摆脱了第一关。