#include <stdio.h>
int main(){
//首先定义四个不同的数据类型,分别是:
//int型,数组型,字符型,字符串型
int Int=1;
int IntArr[]={2,3};
char Char='a';
char *String="hello";
//然后定义四对应的指针,分别是:
//int型指针,数组型指针,字符型指针,字符串型指针
int* P_int;
int* P_arr;
char* P_char;
char* P_string;
/*不同数据类型的指针,在进行赋值时,方法并不一样,
有时需要用&取地址后对指针进行赋值,有时直接用变量名对
指针进行赋值,请问有什么规律吗?*/
P_int=&(Int);
P_arr=IntArr;
P_char=&Char;
P_string=String;
return 0;
}
说的我大概懂了,意思就是:基本数据类型,对于变量名的索引是变量的值,不能直接赋值给只接受地址类型的指针变量,需要取地址后赋值给指针。而对于数组和字符串而言,变量名的索引即是变量的地址,可以直接赋值给指针。
不过我顺着你的思路,想到,对于结构体这种可以存储不同类型数据的集合,其内存创建的方式应该和数组类似,那为何在对集合体类型的指针变量进行赋值时,也需要
取地址后
"对于变量名的索引是变量的值",如果你将单个变量看作长度为1的数组也可以,此时单个变量取值默认索引为0,但一般我们不这么思考问题,和数学一样,尽可能化简,因此索引这个说法对于单个变量就没有意义。
另外索引不是地址,索引是0开始的自然数,标明数据相对位置,地址是内存存储起始位置,即首地址。
关于结构,当你用struct关键词定义一个结构时,就是定义了一个自定义变量,所以结构就是看作简单变量,只不过是个多变量复合体,由于已经给出定义,编译器就知道了包含的各变量的数据长度,编译器能明确就可以直接取值。而数组之所以编译器默认取地址,因为当你只给出数组名或者指针时,系统无法确定哪个元素,所以默认返回首地址。