⑴ c语言,int *p=G 中的p是指什么
c语言中
int *p=G;
这句话的作用是:
①声明一个指向整型数据的指针变量p(简称“指针p”);
②并把变量G的地址赋值给p(这个赋值的过程在更多的时候被称为“让指针p指向整型变量G”。
回答你的问题:
(1)p是一个特殊的变量;
(2)p中只能存放地址(又叫指针);
(3)p中只能存放整型变量的地址(也叫整型指针);
(4)所以,p是一个整型指针变量(或整型变量指针);
(5)p的值是变量G的地址,即p==G;
(6)我们可以用下面的运算得到与p相关的其他量值:
&p--得到变量p的地址;
p--得到变量G的地址;
*p--得到变量G的值,*p==G。
⑵ C语言中 指针各个符号的含义int *(*p)();
*作为定义的时候,是一个左结合操作符,优先跟其左边的描述相结合
int
*
:
整型指针
(*p)
:
用括号调整优先级,强迫其与p作结合,表示p是一个指针类型(否则此处p应与"()"结合作为一个函数,而该"*"则应跟左边的"int
*"结合作为"int
**"整型指针的指针)
如此,相应的我们就很容易解释其他的如:
int
*
整型指针
int
**
整型指针的指针
int
*
a[n]
整型指针数组
int
(*a)[n]
整型数组的指针
int
(*a)(int)
需求整型参数且返回整型数的函数指针
...
搞懂了符号优先级就很容易理解了,另外有些符号优先级是跟编译器有关的,即标准中未定义行为(UNDEFINED
BEHAVIOR),尽量不要在程序中使用这种语法。
⑶ c语言 指针概念问题
我把我的理解跟你说下吧。
int *p; //在定义(或者声明)指针变量时,变量p前面的“*”只是用来说明变量p是个指针变量而不是一个整型变量,int是指这个指针变量指向的是int类型的内存地址,指针本质上就是地址,任何类型的指针变量在内存中都是占用4个字节的存储空间的(即32位二进制数),既然指针变量存放的地址值都是32位的,那为什么还要区分类型呢?这是为了方便指针变量的运算。举例说明,
int*pn;//定义了一个指向整型的指针变量
char*str;//定义了一个指向字符型的指针变量
//假设,pn和str的初始值都是0x1000
pn++;//pn自增加1,pn的值为0x1004,因为int类型是占4个字节的,指向了下一个int类型的内存首地址
str++;//str自增加1,str的值为0x1001,因为char类型是占1个字节的,指向了下一个char类型的内存首地址
那么,从上面的例子,我们就可以知道,指针变量前面加上类型,是为了方便指向该类型的变量的内存空间,那么就可以通过该类型的指针变量来访问它所指向的内存空间的数据。
int*类型的含义是:变量p是指针变量名,而不是*p这个整体,*在定义指针变量的时候只是起说明的作用,int*不是一个整体,这点你要记住,说p是int*型指针,是为了方便而简写的形式,这里的*只起一个标记说明的作用而已,每定义一个int类型的指针变量,前面都要加*。
int *p,*q; //定义了两个指向整型变量的指针变量
int *p,q; //p是指针变量,而q是普通的变量
希望对你理解有所帮助吧。
⑷ C语言指针**p是什么意思
**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值!
例如:
int i=10; //定义了一个整型变量
int *p=&i; //定义了一个指针指向这个变量
int **p1=&p; //定义了一个二级指针指向p指针
那么取出10的值方式为:
printf(“i=[%d] ”,*p);
printf(“i=[%d] ”,**p1);
(4)c语言p的指针名扩展阅读:
指针与数组关系
指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。char *p[10];//p是一个指针数组
数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。
example:
char (*p)[10]//p是一个数组指针
函数指针:本身是一个指针,指向一个函数入口地址,通过该指针可调用其指向的函数,使用函数指针可实现回调函数。
⑸ C语言指针
在循环里, 可以看出 p[2]=&a[2*4], 所以 p[2]=&a[8]
也就是说p[2]是指向a数组中第9个元素的指针
p[2]+1就是将指针向后移动一个单位, 即指向a数组第10个元素(相当于&a[9])
括号前面的星号是从地址中取得对应值, 也就是10
⑹ C语言 *p 和p的区别
C语言中,*p 和p都常用在指针当中表示一个指针变量,*p 和p的区别:
1、表示的含义不同
*p表示此指针指向的内存地址中存放的内容。
p表示一个指针变量的名字,指此指针变量所指向的内存地址。
2、输出的格式不同
*p一般是一个和指针类型一致的变量或者常量。
p输出的是一个16进制数,输出一个指针的地址。
3、功能不同
*p是让程序去那个地址取出数据。
p存放的是地址。
例子:
1、int a[5]={1,2,3,4,5};
int *p=a;//这是在定义指针变量p的同时就直接给它初始化,即把数组a的首地址赋给它。
2、int a[5]={1,2,3,4,5};
int *p;//声明指针变量p
p = a;
(6)c语言p的指针名扩展阅读
(*p)操作是这样一种运算,返回p 的值作为地址的那个空间的取值。(&p)则是这样一种运算,返回当时声明p 时开辟的地址。可以用赋值语句对内存地址赋值。
例:
int *p;
p=2003H;
*p=3000H
结果:
**p=*(*(p))=*(*(2003H))=*(3000H)=3000H。
&&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数无法存放地址。
*&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。
⑺ C语言中*p和**p有何区别
一、表示的东西不同
*p表示p代表相应数据类型在存储单元中存储的首地址,而这个存储单元存储的是相应类型数据的数值。
**p表示p也表示地址,简单的说,这个地址对应的存储单元存储的数也是一个地址,而不是数值,而这个被存储的地址对应的存储单元存储的数据才是真正的相应类型的数值。
二、基类型不同
例如int *p1,**p2;
两者本质上都是指针,但是两者的基类型不同。p1的基类型是int,换句话说p1指针指向的是int型的数据,而p2的基类型是int *换句话说p2指向的是指向int型数据的指针,即指向指针的指针。
三、用法不同
例如int *p;
那么p就是指向int类型变量的一个指针。(即数组)
如果int**p;
那么p就是指向int*类型指针的一个指针。(即指向一维数组的指针,即二维数组)
⑻ C语言中为什么P可代表指针 *P也能代表指针 *号起到什么作用
int*p;//声明中的*表示指针
int**p1;//表示指针的指针,单独看*p1的类型,其实就是int*和p是一个类型
intn;
n=*p//“=”右边的*表示解引用
*p1=p;
⑼ c语言高手进:P为指针变量名,n=6,*(p=&n)表示什么意思
p=&n
这句把n的地址给p
这时p就是n的地址
然后在
*
这个地址
所以*(p=&n)也是就n的值
输出6