指针详解及代码示例

  1. 指针是一种变量

  2. 指针这个变量有他自己的值;

  3. 指针这个变量有他自己的类型,它的类型代表的是它指向的数据的类型

  4. 声明一个指针时,仅仅只是为指针本身分配了空间(浅复制),声明全局变量用malloc

  5. 指针默认指向数组的第一个元素(a[0])

  6. 指针作为函数参数传递时,只传递了一个指针而不是一个数据的完整副本,大大节省内存空间
    并且是按引用传递(例:用于交换数据的值)

  7. 泛型指针没有具体的类型(void *x),可以指向任意类型

  8. 指针类型可以转换,fptr = (float *)iptr

  9. 函数指针:
    A) char * (fun1)(char * p1,char * p2); A)这里fun1不是函数名,而是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针
    B) char * fun2(char * p1,char * p2); B) 与C)表达式相比,唯一不同的就是函数的返回值类型为char
    ,是个二级指针。
    C) char * fun3(char * p1,char * p2); C)fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型。

委托来源于函数指针

代码示例:
int swap2(void *x,void *y,int size) {
void *tem;
if ((tem = malloc(size)) == NULL)
return -1;
memcpy(tem, x, size);
memcpy(x, y, size);
memcpy(y, tem, size);
free(tem);
return 0;
}

int main()
{
int a=111, b=222,*iptr,*iptr2;
iptr = &a;
iptr2 = &b;
cout << “a:” << *iptr << " b:" << *iptr2 << endl;
swap2(iptr, iptr2, 8);
cout << “a:” << *iptr << " b:" << *iptr2 << endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中的智能指针主要有三种:QSharedPointer、QWeakPointer和QScopedPointer。它们都是用来管理动态分配的对象的指针,并且能够自动释放内存,避免内存泄漏。 1. QSharedPointer QSharedPointer是一个线程安全的智能指针,它允许多个指针共享同一个对象,并且能够在最后一个指针离开作用域时自动释放对象。以下是一个简单的示例: ```cpp QSharedPointer<QString> ptr1(new QString("Hello")); QSharedPointer<QString> ptr2 = ptr1; QSharedPointer<QString> ptr3 = ptr2; qDebug() << *ptr1; // 输出"Hello" qDebug() << *ptr2; // 输出"Hello" qDebug() << *ptr3; // 输出"Hello" ``` 2. QWeakPointer QWeakPointer是一个弱引用智能指针,它可以引用由QSharedPointer管理的对象,但不会增加对象的引用计数。当最后一个QSharedPointer离开作用域时,如果没有其他QSharedPointer引用该对象,则该对象被自动释放。以下是一个简单的示例: ```cpp QSharedPointer<QString> ptr1(new QString("Hello")); QWeakPointer<QString> weakPtr1 = ptr1; QWeakPointer<QString> weakPtr2 = weakPtr1; qDebug() << weakPtr1.data(); // 输出"Hello" qDebug() << weakPtr2.data(); // 输出"Hello" ptr1.clear(); qDebug() << weakPtr1.data(); // 输出nullptr qDebug() << weakPtr2.data(); // 输出nullptr ``` 3. QScopedPointer QScopedPointer是一个非共享的智能指针,它在离开作用域时自动释放对象。它不能被复制或共享,因此可以避免由于多个指针共享一个对象而引起的问题。以下是一个简单的示例: ```cpp QScopedPointer<QString> ptr(new QString("Hello")); qDebug() << *ptr; // 输出"Hello" ``` 以上是Qt中三种智能指针的详细介绍及代码示例。使用智能指针可以避免内存泄漏和悬空指针等问题,提高代码的健壮性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值