C语言 详解多级指针与指针类型的关系 c语言关于多级指针的问题

作者&投稿:景哗 (若有异议请与网页底部的电邮联系)
多级指针是人为定义的类别,通常与指针类型没有直接关系。
比如一级指针的值是某个数据的地址,二级指针值是一个指针的地址。

而指针步长与指针类型相关,与几级指针无关。
指针的步长是指向的内存空间的大小。

比如数组 int n[10];n 是指向n[0]的地址指针,n的步长就是n[0]数据类型大小,也就是int的大小。
又比如 int *str[2]={"aaa","bbb"}; str就是指向“aaa”首地址指针的指针。str[0]就是指向aaa”首地址的指针(char *类型),而str就是指向str[0]的指针(char **类型),所以str指向内存空间大小就是(char *)这个类型的大小,也就是其步长。

c语言指针二级指针和二级地址的解释和平常地址与指针的区别~

解释如下:指针的本质其实就是地址,我们常说的指针哪,一般都是指的指针变量,就是存放地址的变量。二级指针,就是指向指针的指针,举例说明:char ch='A'; //定义了一个char型变量ch,并初始化char *p; //定义了一个char型指针变量pchar **pp; //定义了一个char型二级指针变量ppp=&ch; //把变量ch的地址赋值给p,那么p就指向了变量ch了。pp=&p; //把指针变量p的地址赋值给pp,那么pp就指向了指针p了。因为指针变量,它有自己的内存空间,所有的指针类型的变量都是4个字节的大小,即存放的是一个32位的地址值。二级指针和二级地址的本质含义是一样的,指针一般是认为是指针变量的,其值是可变的;而地址,我们通常认为它是一个常量值,是不变的。平常地址与指针,一样的理解,本质是一样的,都是地址。我们说地址,比如说我定义了一个变量a,那么这个变量a的地址&a,在编译阶段它的值就已经确定了,是不变的了。而对于指针变量p,它可以存放变量a的地址&a,也可以存放变量b的地址&b,它的值是可变的,所以我们就把这样的变量就就做指针。 总而言之,指针和地址,本质是一样的,只是两种不同的叫法而已。

首先,这种写法是错误的,系统不会给你创建隐藏的一级指针
正确写法是
int a,*b,**c;
c=&b
*c=&a
只有在c赋值为一个一级指针地址的情况下,*c才是合法的,否则对*c赋值会出现不可预知后果