c语言 参数传值和传地址
static void TestCharP(char **p) { char *q = "ssssss"; *p=q; } static void TestCharP1(char *p) { char *q = "ssssss"; p=q; } static void TestInt(int *a) { *a = 5; } static void TestInt1(int a) { a = 5; } static void TestBuf(char buf[]) { buf[0] = 'a'; } //传值和传地址的区别 int main() { int a = 0; int a1 = 0; char *p=NULL; char buf[5] = {0}; char *p1 = NULL; TestInt(&a); printf("%d\n",a); TestInt1(a1); printf("%d\n",a1); TestCharP(&p); printf("%s\n",p); TestCharP1(p1); printf("%s\n",p1); TestBuf(buf); printf("%s\n",buf); return 0; }
输出:
2.查看地址转换
static void TestCharP(char *p) { //p指向地址:0x00045860 char *q = "ssssss"; //q指向地址:0x00045858 p=q; //p指向地址:0x00045858 } //传值和传地址的区别 int main() { char *p="aaa"; //p指向地址:0x00045860 TestCharP(p); //p指向地址:0x00045860 printf("%s\n",p); return 0; }
查看 p指向地址没有改变
static void TestCharP(char **p) { //*p指向地址:0x0014f888 char *q = "ssssss"; //q指向地址:0x01185858 *p=q; //*p指向地址:0x01185858 } //传值和传地址的区别 int main() { char *p="aaa"; //p指向地址:0x01185860 TestCharP(&p); //p指向地址:0x00045858 printf("%s\n",p); return 0; }
查看 p指向地址改变