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*的引用传给了函数,即把指针的引用传给了函数

原文地址:https://www.cnblogs.com/windlaughing/p/2452211.html