数组有数组表达法和指针表达法 假设一个数组double target[5]
当我在函数的形参部分声明这个数组时 我可以写double target[5]
但是用指针表达的时候应该写double * target
我想问的是这里的指针表达法应该是表达了数组首元素的地址 也就是其类型应该是整型
所以不是应该写int * target吗
不管什么类型的指针,表示的都是它保存的那个地址
我给你举个例子吧
从地址0x12345678开始8个字节分别存放了
0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08
指针的类型会影响你读出来几个字节,如果p是char*,*p=0x01,如果是int*,*p=0x04030201(这里采用小端法),并且解释你取出来的这些字节是会按照相应的类型去解释,比如double*的指针,读出来的数按照双精度浮点数的格式来解释
指针的类型也会影响指针运算,如果p是char*,p+1就是地址+1=0x12345679,如果p是int*,p+1其实是地址+4(挪到下一个int的位置)=0x1234567c
这样说你应该能明白吧,其实指针类型的作用就是告诉你怎么解释它指向的那个地址存放的数据,不同类型指针是可以强制类型转换的
像是malloc(int size)函数,它的作用是分配size大小的一片内存,返回值是void*,因为它事先不知道你想怎么使用这片区域,如果你想开一个40字节的字符数组,那就可以
char *p = (char *)malloc(40);
这个定义的是target的类型,而不是指针的类型,指针的类型不用定义。
指针也可以算个变量吧,只是存的是地址
楼上说指针类型不用定义,是不对的,指针是地址,准确的说指针变量是需要定义类型的比如 char* ;int*;double*;float*,struct*等等
楼主的问题很是没有表达清楚,希望楼主表达准确些,有利于大家回答
指针指向是地址,基本类型的指针指向基本类型的数据结构。double * target就表示指针指向double类型的变量target
指针指向是地址,基本类型的指针指向基本类型的数据结构。double * target就表示指针指向double类型的变量target