c语言 * 和 **型指针
对于C语言的指针类型,有点乱,测试了一下。
了解到:
1.声明赋值与非声明赋值
2. * 与 ** 的区别与意义
3. 一些 & 和 * 的利用方法
如 int * b=<value>,在这里b是int型指针,
声明时候需要加 * ,但是声明时赋值还是赋值给 b的
也就是 int *b =<value> 等价于 int *b, b =<value> 这两句
有声明时赋值可以拆为两句看
另外 直接输出b是b指向的对象的地址,
例如int *b =&c //(c=2)
b就是c的地址
*b就是取c的值—>2
b=&c与 *b=c是等效的
注意b声明是int *型指针,那么只能指向 int型的对象
int ** a=&b
与 * 类似
声明时int ** a=&b等价于 int ** a, a=&b两句
a=&b 等价于 *a =b
但是这里 a 声明是int **型指针,只能指向 int *型 的对象
也就是 b 必须是int *型
本人测试代码
int main(){
int c=2;
int *b;
//printf("b地址%p,b的值%p",&b,b);
b=&c;
//printf("b地址%p,b的值%p",&b,b);
*b=c; // *b=c 等价 b=&c 等价于 int *b=&c
// int *b=&c 等价于 int *b; b=&c;
printf("b地址%p,b的值%p,c地址=%p,*b=%p,c=%p\n",&b,b,&c,*b,c);
int **a=&b; //指向指针的指针
// **a=&b 等价于 a=&b 等价于 *a=b 等价于 *a=&b
*a=&b;
printf("a地址%p,a的值%p,*a=%p",&a,a,*a);
/*
printf("b地址%p,b的值%p",&b,b);
printf("a地址%p,a的值%p\n",&a,a);
printf("a地址%p,a的值%p",&a,a);
*/return 0;
}