C/C++ ptr指针,内存

本文详细介绍了C++中的基本概念,包括函数传址、不同数据类型的内存大小、栈与堆的区别、动态内存分配、函数指针的使用以及回调函数。通过实例展示了如何操作和理解这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//基础
void fun(int* a){
    cout<<sizeof(a)<<'\n';
}
int main(){
    // int a=10; int* p=&a;
    // a==*p;//true
    // void* pp;
    // pp =&a;
    // cout<<pp<<'\n';
    // cout<<p+1<<'\n';
    // cout<<p;
    //用于函数传址调用  test(int* p// int &p)
    int A[5]={1,2,3,4,5};
    fun(A);
    int* p;
    cout<<sizeof(p);

}
void fun(char a[10]){
    //char a[N]在函数传入==char* 类型,大小8 bite
}
int main(){
    // %s c语言string为char[]都要以/0结尾
    char c[3]; c[0]='C',c[1]='h';c[2]='\0';
    char a[]="Ch";
    //cout<<sizeof(a);//3
    //*(a+1)='a' == a[1]='a'

    // 2维数组 //
    int s[2][3]; s[0][0]=11;
    int (*p)[3]=s;  
    //*p,*s指向一维数组,sizeof(p)==8 != sizeof(s);
    // s=p=*S=&s=&s[0]=&s[0][0];首元素地址
    // p!= &p 除此之外p和s完全等价,且p[i]=&p[i]
    //s+1=*(s+1)=s[1]=&s[1]=&s[1][0] 
    //但(s+1)+1 != *(s+1)+1 == s[1]+1=&s[1][1];
    //
    printf("%d\n", &s[1][1]);
    printf("%d\n", *(s+1)+1);
    printf("%d\n", s[1]+1);
}
// 内存 //
struct node{ 
    int data;
};//code(text)

const int N=1e5;//static/global

int main(){
    //栈区stack 函数栈帧(后进先出)

    //堆区heap 需要手动释放
    node* a = new node;
    node*b = (node*) malloc(sizeof(node));
    delete a; free(b);
    //malloc calloc realloc
    //void* realloc( void* ptr, size)
}
// 函数指针 //
template<class T>
auto func(T a, T b){
    auto c=a+b;
    return c;
}
void A(){ cout<<"Hello"<<'\n'; }
void B(void (*p)()){ p(); }
int main(){
    double (*p)(double, double);//一致
    p = &func;// p = func;
    double c= (*p)(1, 3);
    cout<<c<<'\n';
    void (*ptr)(); ptr=A;
    B(A);//回调函数
    B(ptr);
    //sort(_begin, _end, func)这就是回调func
}
//关于内存
//二维数组
int**p = (int**) malloc(n*sizeof(int));
for(int i=0;i<n;i++){
    p[i] = (int*) malloc(n*sizeof(int));
}

int **p = new int*[n];
for(int i=0;i<n;i++){
    p[i] = new int[n];
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值