c语言指针问题解答?

1.p=&a;是取地址,那如何在取地址之后通过p或是*p改变a里面的值呢?可以通过p或者*p改变a里面的值吗?
2.int (*p)[ ] int *p();和int (*p)(); const int *p和int *const p都是什么意思呢?

一、P指向a存值的地址,如p指向地址的内存的值为0001,则*p=0001(为1),这时修改*p=0010,则a的值相应的被修改为2。

二、我们只能通过*p修改a的值,p是一个地址指针,更改p后 p指向了另一块内存,a的值不会被更改。

三、
int *p[] p是一个数组,数组内每个元素都是int*类型,也就是指向整型数据的指针类型,

int *p()是int (*p)()函数调用后的返回值指针

int (*p)()是一个函数的函数指针,即指向函数的地址,在调用导出函数时,经常用此方法调用函数

const int *p是指针指向的值无法改变,但是指针本身可以改变,可以重新指向一块内存

int *const p是指针不能改变,但它指向的值是可以改变的

其实还有 const还有其它用法,我们可以来修饰函数,同时修饰地址和值,如:const int * const p,这样想胡乱改就改不掉了追问

一.

       1.是我的做法不对吗,输出的结果是  8   能把过程截成图片发一下吗

       2.这个0001是按照二进制规律的吗?

二.   

       1.int (*p)()是一个函数的“函数指针”     指针指向的值无法改变,但是“指针本身可以改变”,可以重新指向一块内存     指针不能改变,但它指向的值是可以改变的 这三句话引号部分能不能再详细解释一下。。

追答

    二/十进制的转换你可以百度一下,

    函数指针就是这个函数在内存的地址

    指针就是内存地址,指针可以变,就是他能指向另一块内存,比如AB两盒子,本来指向A,现在改成指向B;常指针指向的内存地址不能变,比如AB两个盒子,p永远只能指向A,不能认为的把它改成B,值即为A盒子内装的东西,装什么由你定,你可以装水,也可以装米

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-02
1.
能通过指针p改变a里面的值,前提是a不是常量且指针p不是指向常量的指针(只读型指针)。举例:
a、
int a=1,*p=&a;
//此时a等于100了
*p=100;
b、
int a=1;
const int *p=&a;
//不能通过p改变a的值,因为p是只读型指针(只读型指针可以指向变量,但不能通过指针修改它指向的变量的值,就好像在它看来,它好像指向的是一个常量)
//*p=100;
c、
const int a=1,*p=&a;
//同样不能,因为a是常量且p是只读型指针
//*p=100;
2.
int (*p)[n]是指向数组的指针(数组指针),p指向的数组需有n个int型元素,如:
int a[2],b[2][2],(*p)[2];
则p=&a;p=b;p=b+1;都行。
int *p();是函数声明。函数名是p,不需要参数,需返回一个int类型的指针。
int (*p)();是指向函数的指针(函数指针),p可以指向的函数需满足无参且返回类型为int,如:
int f()
{
}
int (*p)()=f;可以。
const int *p;是将p定义为指向常量的指针(只读型指针),这样就不能通过指针p改变它指向的变量的值,就好像它指向的是一个常量,前面已有这样的例子了。

int * const p是将指针p自己定义为常量,即它永远指向同一个变量或常量,不能改变p自己的值(即除了初始化时,不能用=为它赋值),因此必须在定义时初始化p,如:
int a=1,c;
const int b=2,d=3;
则int * const p=&a;int * const p=&b;都行,而p=&c;p=&d;都不行。本回答被提问者和网友采纳
相似回答