指针用法---常有问题

void swap1(int p,int q)
{
        int temp;
        temp = p;
        p=q;
        q=temp;
}

void swap2(int *p,int *q)
{
        int *temp;
        *temp = *p;
        *p=*q;
        *q=*temp;
}

void swap3(int *p,int *q)
{
        int *temp;
        temp = p;
        p=q;
        q=temp;
}
void swap4(int *p,int *q)
{
        int temp;
        temp = *p;
        *p=*q;
        *q=temp;
}

void swap5(int &p,int &q)
{
        int temp;
        temp = p;
        p=q;
        q=temp;
}

void test20()
{
        int a = 3,b = 5;
        //swap1(a,b);
        //swap2(&a,&b);
        //swap3(&a,&b);
        swap4(&a,&b);
        swap5(a,b);
        cout<<"a="<<a<<" b="<<b<<endl;


}

 


void getmemory(char *p,int num)
{
        p = (char*)malloc(sizeof(char)*num);
}

void test21()
{
        char *s = NULL;
        getmemory(s,100);
        strcpy(s,"hello");
        cout<<"ss=="<<s<<endl;
}

出现段错误

 


void getmemory(char **p,int num)
{
        *p = (char*)malloc(sizeof(char)*num);
}

void test21()
{
        char *s = NULL;
        getmemory(&s,100);
        strcpy(s,"hello");
        cout<<"ss=="<<s<<endl;
        cout<<"ss=="<<*s<<endl;
        cout<<"ss=="<<&s<<endl;
}

运行没有问题

char *getmemory(char *p,int num)
{
        p = (char*)malloc(sizeof(char)*num);
        return p;
}

void test21()
{
        char *s = NULL;
        s = getmemory(s,100);
        strcpy(s,"hello");
        cout<<"ss=="<<s<<endl;
        cout<<"ss=="<<*s<<endl;
        cout<<"ss=="<<&s<<endl;
}

运行没有问题

void getmemory(int *a)
{
        *a = 7;
}

void test21()
{
        int a;
        getmemory(&a);
        cout<<"a=="<<a<<endl;
        cout<<"a=="<<&a<<endl;
}

运行没有问题

 

char *s1()
{
        char s1[] = "222";
        return s1;
}
const char *s2()
{
        char *s1 = "222";
        return s1;
}


const char *s3()
{
        static char s1[] = "222";
        return s1;
}

void test22()
{
        const char *s = s3();
        cout<<s<<endl;

        char c[] = "122";
        c[0] ='t';

        //char *c1 = "ada";
        //*c1 = 't';
}

 

 


void test23()
{
        int a[3];
        a[0]=1,a[1]=2,a[2] =3;
        int *p,*q;

        p =a;
        cout<<p<<endl;
        cout<<*p<<endl;
        q = &a[2];

        cout<<q<<endl;
        cout<<"q-p="<<q-p<<endl;


        cout<<"*q="<<*q<<endl;
        cout<<a[q-p]<<endl;
        cout<<"a[*q-*p]="<<a[*q-*p]<<endl;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值