当前位置: 技术问答>linux和unix
对指针越来越难弄清楚了,请大家解释一下我心头的疑问
来源: 互联网 发布时间:2016-02-16
本文导语: 1:定义一个结构,可以先不管结构是什么内容 struct atmel_uart_port { struct uart_port uart; /* uart */ struct clk *clk; /* uart clock */ unsigned short suspended; /* is port suspended? */ short use_dma_rx; /* enable PDC receiver */ short pdc_rx_idx; ...
1:定义一个结构,可以先不管结构是什么内容
struct atmel_uart_port {
struct uart_port uart; /* uart */
struct clk *clk; /* uart clock */
unsigned short suspended; /* is port suspended? */
short use_dma_rx; /* enable PDC receiver */
short pdc_rx_idx; /* current PDC RX buffer */
struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */
short use_dma_tx; /* enable PDC transmitter */
struct atmel_dma_buffer pdc_tx; /* PDC transmitter */
};
struc atmel_uart_port amtel_ports[ATMEL_MAX_UART]; // 注意,这里声音的是全局变量
2:一个函数功能
static int __devinit atmel_serial_probe(struct platform_device *pdev)
{
struct atmel_uart_port *port; // 注意,这里声明的是一个结构指针
int ret;
port = &atmel_ports[pdev->id]; // 问题1:port和atmel_ports[pdev->id]指向同一个地址还是二个不同的地方?这语句是取地址给port,还是拷贝数据给port?
atmel_init_port(port, pdev);
ret = uart_add_one_port(&atmel_uart, &port->uart);
if (!ret)
{
device_init_wakeup(&pdev->dev, 1);
platform_set_drvdata(pdev, port);
}
return ret;
}
static int __devexit atmel_serial_remove(struct platform_device *pdev)
{
struct uart_port *port = platform_get_drvdata(pdev); // 问题2: 同问题1 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port; // 问题3:同问题1
int ret = 0;
device_init_wakeup(&pdev->dev, 0);
platform_set_drvdata(pdev, NULL);
if (port) {
ret = uart_remove_one_port(&atmel_uart, port);
kfree(port); // 最终问题:假设只是指向同一个地址,port和全局变量amtel_ports是同一个地址,那么这里有必须释放吗?如果不是同一个地址,那么问题又来了,我们声明 char a[100]; char *b = &a[60];这里可是指向同一个地址啊?难道结构与数组指针不一样吗?
}
return ret;
}[/size]
struct atmel_uart_port {
struct uart_port uart; /* uart */
struct clk *clk; /* uart clock */
unsigned short suspended; /* is port suspended? */
short use_dma_rx; /* enable PDC receiver */
short pdc_rx_idx; /* current PDC RX buffer */
struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */
short use_dma_tx; /* enable PDC transmitter */
struct atmel_dma_buffer pdc_tx; /* PDC transmitter */
};
struc atmel_uart_port amtel_ports[ATMEL_MAX_UART]; // 注意,这里声音的是全局变量
2:一个函数功能
static int __devinit atmel_serial_probe(struct platform_device *pdev)
{
struct atmel_uart_port *port; // 注意,这里声明的是一个结构指针
int ret;
port = &atmel_ports[pdev->id]; // 问题1:port和atmel_ports[pdev->id]指向同一个地址还是二个不同的地方?这语句是取地址给port,还是拷贝数据给port?
atmel_init_port(port, pdev);
ret = uart_add_one_port(&atmel_uart, &port->uart);
if (!ret)
{
device_init_wakeup(&pdev->dev, 1);
platform_set_drvdata(pdev, port);
}
return ret;
}
static int __devexit atmel_serial_remove(struct platform_device *pdev)
{
struct uart_port *port = platform_get_drvdata(pdev); // 问题2: 同问题1 struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port; // 问题3:同问题1
int ret = 0;
device_init_wakeup(&pdev->dev, 0);
platform_set_drvdata(pdev, NULL);
if (port) {
ret = uart_remove_one_port(&atmel_uart, port);
kfree(port); // 最终问题:假设只是指向同一个地址,port和全局变量amtel_ports是同一个地址,那么这里有必须释放吗?如果不是同一个地址,那么问题又来了,我们声明 char a[100]; char *b = &a[60];这里可是指向同一个地址啊?难道结构与数组指针不一样吗?
}
return ret;
}[/size]
|
1,只是取地址而已,完全可以有多个指针指向同一个地址啊。这里的pdev-id是数组的序号,跟指针还是不是同一个意思。
2. 你这个是函数调用啊,输入参数是指针,输出参数也是指针,有什么好困惑了
3. 这个是去变量port的地址,如此而已。我么可以用指针去访问存在的任何变量
4. 只能释放一个,不能对一个指针做多次释放。问题的问题:这里是将指针指向数组第60个元素所在的地址。
I suggest you should improve your basic idea about the computer. I don't how to expain it with you.
2. 你这个是函数调用啊,输入参数是指针,输出参数也是指针,有什么好困惑了
3. 这个是去变量port的地址,如此而已。我么可以用指针去访问存在的任何变量
4. 只能释放一个,不能对一个指针做多次释放。问题的问题:这里是将指针指向数组第60个元素所在的地址。
I suggest you should improve your basic idea about the computer. I don't how to expain it with you.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。