zoukankan      html  css  js  c++  java
  • C/C++ 指针应用 常见问题

    一、指针常见问题

    #include "stdafx.h"
    #include <stdio.h>
    #include<stdlib.h>
    #include <string.h>
    void fucntion(char* b){
        b=(char*)malloc(4);
      strcpy(b,"abc");
        printf("In function:%s\n",b);
    }
    
    int main(int argc, char* argv[])
    {
        char* a=NULL;
        fucntion(a);
        printf("In main:%s\n",a);
        return 0;
    }

     

     输出:

    In function:abc

    In main:(null)

    为什么main函数中不显示abc呢??

    二、理解指针:

     1 int main(int argc, char* argv[])
     2 {
     3     char* a=NULL;
     4     printf("char* : %d\n",sizeof(a));
     5     int* b=NULL;
     6     printf("int*  : %d\n",sizeof(b));
     7     double* c=NULL;
     8     printf("double*  : %d\n",sizeof(c));
     9     return 0;
    10 }

    输出:

    char* : 4

    int* : 4

    double* : 4

    指针占四个字节,占32bit。

    1 int main(int argc, char* argv[])
    2 {
    3     char* a;
    4     int b=(int)a;
    5     printf("char* convert to int : %d\n",b);
    6     return 0;
    7 }

    输出:

    char* convert to int :-858993460

    指针由32位二进制组成,它的值对应内存的地址。其的值可以转化成int(32位)显示出来。

    因为指针对应内存32位地址,所以在32位系统中不管是什么类型的指针,都是32位的。

    三、正确的用法: 
    所以第一部分中,只是把char*的值传给了函数。属于值传递。
    1、
    void fucntion(char** b){
        *b=(char*)malloc(4);
        strcpy(*b,"abc");
        printf("In function:%s\n",*b);
    }
    
    int main(int argc, char* argv[])
    {
        char* a=NULL;
        fucntion(&a);
        printf("In main:%s\n",a);
        return 0;
    }

    输出:

    In function:abc

    In main:abc

     

    把char*的地址传给了函数,即把指针的地址传给了函数。 

    2、

     

    void fucntion(char*& b){
        b=(char*)malloc(4);
        strcpy(b,"abc");
        printf("In function:%s\n",b);
    }
    
    int main(int argc, char* argv[])
    {
        char* a=NULL;
        fucntion(a);
        printf("In main:%s\n",a);
        return 0;
    }

     

    输出:

    In function:abc

    In main:abc

     

    把char*的引用传给了函数,即把指针的引用传给了函数

  • 相关阅读:
    使用SoapUI发送Post请求
    webservice wsdl地址
    BurpSuite(二) proxy 模块
    BurpSuite(一)工具介绍
    Windows下配置DVWA
    .Net WebApi 支持跨域访问使用 Microsoft.AspNet.WebApi.Cors
    小程序学习 (一) 入门准备
    学习EChart.js(四) 移动端显示
    JQuery 获取select 的value值和文本值
    JS 获取URL参数
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2452211.html
Copyright © 2011-2022 走看看