指向内存的指针

时间:2015-05-12 01:19:10

标签: c pointers char

我正在学习C并且有一些问题。 我正在试图为每个声明的变量打印内存槽,但是当我为Char []声明指针时,它只是不起作用。

这是我的代码:

int main () {
    char a[3]; // this variable is my problem
    int b;
    float c;
    char d;
    int e=4;

    char *pachar; //A char type variable for the pointer.
    int *paint;
    float *pafloat;
    char *pacharr;
    int *paintt;

    pachar = &a; // when I try to assign the memory to the pointer, it shows a Warning message.
    paint = &b;
    pafloat = &c;
    pacharr = &d;
    paintt = &e;


    printf("%p \n",pachar);
    printf("%p \n",paint);
    printf("%p \n",pafloat);
    printf("%p \n",pacharr);
    printf("%p \n",paintt);

    return(0);
}

这是警告信息。我做错了吗?

  

“警告:从不兼容的指针类型分配”

3 个答案:

答案 0 :(得分:5)

您将a声明为char

的数组
char a[3];

名称a表示一个数组,可以解释作为指向数组初始元素的指针。因此,当您将&指定给指针时,您不需要a

pachar = a;

当你在a表达式中获取&a的地址时,会得到一个指向三个字符数组的指针。尝试将指向数组的指针分配给指针到字符串的触发器编译器警告。

答案 1 :(得分:3)

您可以获取第一个元素的地址,而不是取a的地址。数组的地址与其第一个元素的地址相同。

pachar = &a[0];

答案 2 :(得分:1)

char a[3], *pachar;
pachar = a;

printf("Address = %u\n", a); // Base address of the Array. "&a" not required.

printf("Address = %u\n", &a[0]); // Address of the first element.

printf("Address = %u\n", pachar);// Address of the first element.

printf("Address = %u\n", pachar + 0); // Pointer Arithmetic ...

printf("Address = %u\n", pachar + 1); // a[1] is equivalent to pachar + 1

printf("Address = %u\n", &a[1]); // Similar to the above.