本文目录一览:
- 1、关于C语言中的二级指针
- 2、C语言中的结构体二级指针问题
- 3、c语言二级指针问题
- 4、c语言关于二级指针
- 5、c语言 二级指针
- 6、关于c语言二级指针的问题
关于C语言中的二级指针
二级指针就是指针的指针,也就是指向一块内存的地址的地址。例子如下
int i = 23;
int *pi = i;
int **ppi = π
cout i ' ' *pi ' ' **ppi endl;
数组就是存放多个变量的一块内存。该内存块的大小取决于该数组中变量的类型和个数,
C语言中的结构体二级指针问题
// PTREE 可以理解为是 struct TreeNode * 的别名,
// PTREE 类型的变量,即是指向 struct TreeNode 结构体变量的指针,
// 那么,PTREE * 类型的变量,就是指向 struct TreeNode 结构体变量指针的指针,
// 要理解为什么参数中传递的是指向 PTREE 类型的指针,首先要了解 C 语言参数传递的机制
// C 语言中,形参只是实参值的一份拷贝,它们仅仅是值相等,除此外再无其他关联,
// 重要的是,它们的地址不同,也就是说,改变了形参,实参并不受其影响。
// 而为了影响到实参,就需要知道实参的地址,通过其地址来修改实参。
// 通过把实参的地址传给形参,就可以修改与其相关联的实参的内容。
// C 语言的传参是基于传值的,理解了这个,由这类问题造成的困惑都会迎刃而解啦。
// 遇到指针问题,可以通过画图来帮助分析问题
// 要了解更多关于 C 语言传参机制的更多内容,可以再百度一下。
// 希望可以帮到你
c语言二级指针问题
7——k的值
5——s=t,s是t的地址,即s指向的内容是t(一个指向整型变量的指针);
*s=m,s指向的内容是m的地址,又因为s指向的内容是t,所以t的值改变成为m的地址,即t 指向的内容为m(一个整型变量),因此*t(t指向的内容)的值为5
5——**s=*(*s)=*t
3——i的值
3——int *p=i 等价于 int *p;(定义一个整形指针p)p=i;(p的值为i的地址),所以*p的值为3
3——int **r(定义一个指针r,r指向的内容是一个整形指针),r=p(r的值为p的地址,即r指向的 内容是一个整形指针p,其中p的值是i的地址)**r=*(*r)=*p
说的不太清楚请见谅,我指针也是属于一知半解,不过因为指针直接访问内存,所以请一定理解好它,否则以后编写C语言的程序很容易造成编译器检查不出的错误导致大范围的人工查错。
c语言关于二级指针
实参看情况比如
1 .char array[10][10];
则可以将array 传入。
2 当然也可以 char **array;然后自己申请内存。
接着将array传入。
3 或者char *array;
将array传入。
当然要看你是什么用法。
从你的函数来看你估计是要传一个二维数组首地址,也就是第一个。
c语言 二级指针
第一条改成
int
a[10][20],*p=a[0];
二维数组本来就是以为数组,二级指针是指针的指针,不同概念
char
*a[]={"a","b"};
char
**p=a;
这里定义了一个指针数组,里面保存了两个地址,一个是字符串a的首地址,一个是字符串b的首地址,然后数组的首地址a,这样用一个二级指针才能访问,这就是所谓的指针的指针
int
a[2][2]={1,2,3,4};
int
(*p)[2]=a;
(*p)[2]的意思是,p是一个指针变量,只想一个有两个元素的一位数组,这不刚刚就是二维数组的首地址吗?所以这个(*p)[2]是可以指向二维数组首地址
*p[2]的意思是,定义一个数组,里面有两个指针元素,这和"[]","*"运算符优先级有关的
关于c语言二级指针的问题
#include stdio.h
int main(int argc, char *argv[])
{
char *strings[]={"123","456","789"};
char **p;
p = strings;
printf("[%c] [%s]\n", **p, *p);
return 0;
}
打印信息是[1] [123]
很正常嘛,完全正确啊,没啥异常。
我知道了,你可能有误解,**p不是指向string[0],而是指向string[0][0], *p才是指向string[0]