wangzezhong 发表于 2020-1-16 23:05:09

关于指针的小问题

#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:10:43

本帖最后由 jackz007 于 2020-1-16 23:16 编辑

      a作为一个指针,在 main() 中也是一个局部变量,也会在堆栈中分配到存储空间。如果程序是 32 位的,a 会占用 4 个字节(32位指针),如果是 64 位的,则会占用 8 个字节(64 位指针),a 的值是保存有字符串 "ikjk" 的内存地址,也就是被保存在这 4 或 8 个字节内存空间的内容,但是,作为一个变量,a 自己也是有内存地址的,那么,& a 就是它自己的内存地址,这不是很正常吗?
      在 printf() 中,应该使用专用的格式描述符 "%p",而不是 "%d" 来显示一个指针(内存地址)。

4goodworld 发表于 2020-1-19 22:20:04

如果int b=1,&b是不是值1的地址,&b对应的内容可能是1吗?不可能
如果你这么看 char* a,那a不就是一个char*类型的变量,那么请问&a是什么?不就是这个a所对应值的地址,同理,a能等于&a吗?答案是一样的
你理解上还有点偏差,其实&a是a这个指针所在地址而已

Croper 发表于 2020-1-20 10:56:37

一个是指针本身的地址一个是指针指向的地址,一个位于南京指向武汉的路标,你要查看路标指向的位置就是武汉,路标本身的位置就是南京

jiro 发表于 2020-1-21 15:23:48

4333608应该是字符串“ikjk"的首地址,而1638212是指针a的地址{:10_256:}

琴长不过时光 发表于 2020-1-21 17:09:48

指针 是一种数据类型 指针占内存空间指针指向的变量也占内存空间要分清指针的指向 和 指针的本身
页: [1]
查看完整版本: 关于指针的小问题