1 变量,是内存地址的一个抽象名。在静态编译的程序中,所有的变量名都会在便宜的时候转换成内存地址。
2 结构体, 不管结构体的实例是什么 ,访问其成员其实是该结构体地址加上成员的偏移量。
3 数组 , 访问成员数组名其实得到的是成员相对于数组名的相对地址,而访问成员指针是指访问相对地址中的内容。
所以对于数组char s[10]
来说 ,使用数组名 s与使用地址&s是一样的。比如这样一段代码:
char s[10];
printf("print s is: %d\n",s);
printf("print &s is: %d\n",&s);
在我的机器上运行的结果是:
4 使用指针声明结构体的用处
个人感觉是为了方便使用malloc函数开辟内存空间,因为malloc函数返回的是一个指针指向分配的空间。比如如下定义的一个链表结构体
typedef struct Nnode{
int data;
struct Nnode * next;
} PtrToNnode;
我们在声明空间的时候就可以使用
PtrToNnode * newNode = (PtrToNnode)malloc(sizeof(PtrToNnode);