打印

请问关于C语言指针使用问题

[复制链接]
2485|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xil|  楼主 | 2008-6-15 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下程序,在函数声明时有个INT8U *buffer指针,但在使用时buffer却没带星号,buffer = SpiTxRxByte(0);为什么不带星号啊? 





void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)  

    INT8U i,temp; 
        temp = addr | READ_BURST;                //写入要读的配置寄存器地址和读命令 
    CSN_0; 
    while (GDO0); 
        SpiTxRxByte(temp);    
    for (i = 0; i < count; i++)  
        { 
        buffer = SpiTxRxByte(0); 
    } 
    CSN_1; 

相关帖子

沙发
dld2| | 2008-6-15 14:39 | 只看该作者

re

buffer相当于*(buffer + i)

C的数组和指针有时是混用的。

使用特权

评论回复
板凳
HWM| | 2008-6-15 14:56 | 只看该作者

数组名就是“指针”,只不过其值不可变——即常量指针。

使用特权

评论回复
地板
xil|  楼主 | 2008-6-15 18:06 | 只看该作者

谢谢楼上两位解释

有点明白了,但我对这条程序看得不太懂,在开始时候声明了一个单字节指针*buffer,但后面却突然来了个数组buffer,请问这是怎样变出来的啊?

还有,如果要使用数组,为什么在声明时不直接定义int8u buffer啊?但它在声明时却定义了一个指针

使用特权

评论回复
5
Swd21ic| | 2008-6-15 21:58 | 只看该作者

Re

如果把这个程序改成这样是不是觉得就正常了?

void halSpiReadBurstReg(INT8U addr, INT8U buffer[], INT8U count)  

    INT8U i,temp; 
        temp = addr | READ_BURST;                //写入要读的配置寄存器地址和读命令 
    CSN_0; 
    while (GDO0); 
        SpiTxRxByte(temp);    
    for (i = 0; i < count; i++)  
        { 
        buffer = SpiTxRxByte(0); 
    } 
    CSN_1; 


可以在函数体内调用sizeof(Buffer),它的值是一个指针的大小.而不是整个数组的大小.因为实际处理时就是把int Buffer[]转换成了 int *Buffer.
上面说了.指针和数组是可以混用 

使用特权

评论回复
6
xil|  楼主 | 2008-6-15 23:33 | 只看该作者

请问int Buffer[]如何等价为 int *Buffer?

int *Buffer也有可能是一个实型变量指针,电脑如何判断它是数组的指针啊?

使用特权

评论回复
7
xwj| | 2008-6-15 23:58 | 只看该作者

唉,参数传递的是且只能是指针

传递过去的就是首地址


函数声明成void halSpiReadBurstReg(INT8U addr, INT8U buffer[], INT8U count)  
或者
void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)  
那么第二个参数就只能是指针,不是也会被强制转换成所声明类型的指针

声明一个指针*buffer,则调用时只能是用
buffer=数组名
buffer=数组首址
buffer=&数组名

buffer=数组名
buffer=&数组名
buffer=数组名+i

等方式,其实3种不同写法是完全等效的,传递的都是地址

然后用
*buffer=xx;
或buffer[0]=xx;
来修改或取出指针所指向位置的内存单元
上面也是完全等效的

记住:
函数声明时的int *Buffer和程序指令中的*Buffer完全时两个意思

但不管怎么写,数组名就是个指针,同类型下数组名的指针就是&数组名(这是个地址) +i(偏移)



不懂就去看书,仔细研究 书上的每一句话!!!

使用特权

评论回复
8
computer00| | 2008-6-16 00:47 | 只看该作者

看看我以前这个旧贴:

甚至写成i[buffer]都可以,更甚至3[buffer]都可以~~~相当于buffer[3]。

http://blog.**/computer00/42695/message.aspx

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

xil

12

主题

48

帖子

0

粉丝