我正在学习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);
}
这是警告信息。我做错了吗?
“警告:从不兼容的指针类型分配”
答案 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.