当前位置:  技术问答>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]

|
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.

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • (最好看看,也许你也不知道)有关指针变量定义时赋初值的疑问
  • 指针的疑问,大家帮我解释一下吧
  • 结构体中指针的疑问,急,一直迷惑
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • gcc编译CORBA程序如何关闭智能指针转换为普通指针的警告
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 指向类成员函数的指针其实并非指针
  • 谁说java没指针,我觉得全是指针才对
  • 深入解析C++中的指针数组与指向指针的指针
  • 一个用指针传递内存的问题(如果传进去的是三重指针确不行)
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • 关于free指针的指针分量
  • C语言中常量指针与指针常量区别浅析
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • C++中指向对象的常指针与指向常对象的指针详解
  • 关于指针变量,struct 变量,指针使用的一些疑惑,望高手指教
  • 深入理解数组指针与指针数组的区别
  • 深入解析函数指针与返回函数的指针
  • 指向变量的常指针与指向常变量的指针详细解析
  • 结构指针类型强制转换
  • 请问return语句会执行哪些操作?在函数中return一个已分配内存的指针,该指针所占用的内存会释放吗?
  • 请问如何在linux (redhat)下传递一维数组指针?
  • C:函数指针
  • 利用函数指针的好处是什么?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3