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