关于指针的小问题
#include <stdio.h>int main(void)
{
char *a="ikjk";
printf("%s %d %d\n",a,a,&a);
}
此时输出为
ikjk 4333608 1638212
此时指针a的地址 a为什么跟&a不同呢?
本帖最后由 jackz007 于 2020-1-16 23:16 编辑
a作为一个指针,在 main() 中也是一个局部变量,也会在堆栈中分配到存储空间。如果程序是 32 位的,a 会占用 4 个字节(32位指针),如果是 64 位的,则会占用 8 个字节(64 位指针),a 的值是保存有字符串 "ikjk" 的内存地址,也就是被保存在这 4 或 8 个字节内存空间的内容,但是,作为一个变量,a 自己也是有内存地址的,那么,& a 就是它自己的内存地址,这不是很正常吗?
在 printf() 中,应该使用专用的格式描述符 "%p",而不是 "%d" 来显示一个指针(内存地址)。 如果int b=1,&b是不是值1的地址,&b对应的内容可能是1吗?不可能
如果你这么看 char* a,那a不就是一个char*类型的变量,那么请问&a是什么?不就是这个a所对应值的地址,同理,a能等于&a吗?答案是一样的
你理解上还有点偏差,其实&a是a这个指针所在地址而已 一个是指针本身的地址一个是指针指向的地址,一个位于南京指向武汉的路标,你要查看路标指向的位置就是武汉,路标本身的位置就是南京 4333608应该是字符串“ikjk"的首地址,而1638212是指针a的地址{:10_256:} 指针 是一种数据类型 指针占内存空间指针指向的变量也占内存空间要分清指针的指向 和 指针的本身
页:
[1]