关于指针变量,*p和p到底有什么区别啊? c语言的指针部分*p与p的区别是什么?

C++\u7684\u6307\u9488\u53d8\u91cf\u4e2d\uff0c*p\u4e0ep\u6709\u4ec0\u4e48\u533a\u522b\uff1f

p\u6307\u5411\u7684\u662f\u5730\u5740\uff0c*\u662f\u89e3\u9664\u64cd\u4f5c\u7b26\uff0c\u52a0\u5728p\u524d\u9762\u662f\u4e3a\u4e86\u83b7\u53d6\u5b58\u50a8\u5728\u8fd9\u4e2a\u5730\u5740\u7684\u503c

p\u662f\u6307\u9488\u53d8\u91cf\uff0c\u5176\u503c\u662f\u4e00\u4e2a\u53d8\u91cf\u7684\u5730\u5740\u3002p\u6536\u5230\u4e86\u54ea\u4e2a\u53d8\u91cf\u7684\u5730\u5740\uff0c\u5c31\u6307\u5411\u54ea\u4e2a\u53d8\u91cf\u3002\u8be5\u53d8\u91cf\u6210\u4e3ap\u7684\u5bf9\u8c61\u3002
*p\u662fp\u6240\u6307\u5411\u7684\u5bf9\u8c61\u7684\u503c\u3002
\u4f8b\u5982:int i=3,*p;
p=&i; \u6ce8\u610f:p\u6536\u5230i\u7684\u5730\u5740\uff0c\u6545p\u6307\u5411i\uff0ci\u662fp\u7684\u5bf9\u8c61\u3002
printf("%d,%d\n",i,*p); \u8f93\u51fa:3,3 \u6ce8\u610f:*p\u662fp\u6240\u6307\u5411\u7684\u5bf9\u8c61\u7684\u503c\uff0c\u5373i\u7684\u503c\u3002
C\u8bed\u8a00
C\u8bed\u8a00\u662f\u4e00\u95e8\u901a\u7528\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\uff0c\u5e94\u7528\u5e7f\u6cdb\u3002C\u8bed\u8a00\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u63d0\u4f9b\u4e00\u79cd\u80fd\u4ee5\u7b80\u6613\u7684\u65b9\u5f0f\u7f16\u8bd1\u3001\u5904\u7406\u4f4e\u7ea7\u5b58\u50a8\u5668\u3001\u4ea7\u751f\u5c11\u91cf\u7684\u673a\u5668\u7801\u4ee5\u53ca\u4e0d\u9700\u8981\u4efb\u4f55\u8fd0\u884c\u73af\u5883\u652f\u6301\u4fbf\u80fd\u8fd0\u884c\u7684\u7f16\u7a0b\u8bed\u8a00\u3002

1、内容不同

星号是用来指定变量p是指针,p是一个变量,其值为另一个变量的地址,它表示了在内存中的一个地址,即,内存位置的直接地址。而*p是所指向地址的值。

2、数据类型不同

在程序声明变量的时候的*,只是表明“它是一个无符号整数,这个整数指向某个内存地址,一次访问sizeof(type)长度”,所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。

而*p可以是整型、浮点型或者字符型。

3、使用方法不同

在编程时,*p可以直接使用,因为p声明为一个指针,使用它的时候需要带上*表示该位置的值,比如int a,*p;*p=a。

直接使用p的时候,p=&a。

扩展资料:

另类*和&

1、两个地方要注意: 在程序声明变量的时候的*,只是表明“它是一个无符号整数,这个整数指向某个内存地址,一次访问sizeof(type)长度”。这点不要和(*)操作符混淆;

2、在C++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新的一行,该行内存地址等于和调用时传入的对应参数内存地址”。

3、这点不要和(*)声明符,(&)操作符混淆。

参考资料:

百度百科-指针



区别:

以下面的情况说明:

1、int a = 5;

int* p = &a;

结论:

*p   是指针变量p指向的变量a的存储内容,*p = 5;

p   是指针变量的存储内容,因为p指向a,所以p的存储内容(存储空间的值)就是系统为变量a分配的存储地址;

2、分析:

int a = 5;

int* p = &a;

int* q = p;

3、【说明】

1)上面的程序中首先声明了一个int类型的变量a,初始化为5;这个过程为:

2)在初始化时,存储空间存储的是int型的值5,存储地址是由系统自动分配的,同理要声明一个指向a的指针,在初始化的时候赋值给指针变量的值应该是变量a的存储地址,故而有 int* p = &a;

4、在下面的程序中:

int arr[] = { 1, 2, 5, 7 };

int* parr = arr;

同理,要是声明另外一个int类型的指针变量q:

1)int* q = p;

声明了一个int类型的指针变量,并将指针变量p的值赋予q,同样是变量,a = 5,5是变量a的存储空间的值,那么p=?,p等于p存储空间的那个值,即p=#ffa1(a的存储地址);

现在将这个值赋给了指针变量q,正如a初始化的过程一样,int a=5的过程,是将5存储在了int类型变量的存储空间之中,初始化指针变量q时,也是将等号右边的值存储在q的存储空间之中,上边的操作的结果如下:

使得指针变量q指向了变量a。

5、【说明】

从上面的操作可以看出,&p代表的是指针变量p的存储地址。

int* q = *p;

声明了一个指针变量q,并对其初始化,这一过程的操作如下:

为指针变量q初始化,q的存储空间中存储的值为5.

【说明】

1、从上面的操作可以看出,是将*p的值赋给了q,p指向变量a,p=#ffa1,而*p的过程就是获得p地址处的存储空间的值,即*(#ffa1)=5,也就是将5赋给了指针变量q,q的存储空间存储的是5;

2、指针变量是指向某一变量的变量,在其存储空间中存储的一般是其他变量的存储地址,上面的初始化过程int* q = *p;是非常危险的,有可能造成程序奔溃。



P的值是指针指向的数据的地址,而*p表示的是指针指向数据的数值,
例如
a=2;//a的地址为1000
p=&a;
则:
p=1000
*p=2

首先搞明白一点,printf语句中表达式的执行顺序是从右向左的,并且对于*(q++),首先进行解引用操作,再自增,即*q, q=q+1;所以说第一个printf的输出为2 2
对于第二个printf,首先执行(*q)++,再执行*p++,对于(*q)++可以转化为先执行(*q),即输出它的值,再执行(*q)=(*q)+1,最后输出*p,所以结果为3 2

p是一个内存地址值
*p是地址p指向的内容
对地址操作的时候直接用p,对内容操作的时候,用*p

  • C璇█ *p 鍜宲鐨勫尯鍒?
    绛旓細p杈撳嚭鐨勬槸涓涓16杩涘埗鏁帮紝 杈撳嚭涓涓寚閽堢殑鍦板潃銆3銆佸姛鑳戒笉鍚 p鏄绋嬪簭鍘婚偅涓湴鍧鍙栧嚭鏁版嵁銆俻瀛樻斁鐨勬槸鍦板潃銆備緥瀛愶細1銆乮nt a[5]={1,2,3,4,5};int *p=a;//杩欐槸鍦ㄥ畾涔鎸囬拡鍙橀噺p鐨勫悓鏃跺氨鐩存帴缁欏畠鍒濆鍖栵紝鍗虫妸鏁扮粍a鐨勯鍦板潃璧嬬粰瀹冦2銆乮nt a[5]={1,2,3,4,5};int *p;//澹版槑鎸囬拡...
  • C璇█鎸囬拡*p涓巔鏈変粈涔堝尯鍒?printf杈撳嚭琛ㄥ垪瑕佸摢涓?涓轰粈涔?
    绛旓細澹版槑涓鎸囬拡浠ュ悗锛屸滆鍙モ濋噷锛屽嚭鐜 *p锛 琛ㄧず 鏄 鏁板硷紝鍑虹幇 p锛 琛ㄧず 鏄 鍦板潃銆俰nt a=5;int *p=&a; printf("%d", *p); // 鎵撳嵃 鏁板 5 濡傛灉 鍐 printf("%d", p); 涓嶅甫鏄熷彿鐨勶紝鍒欐槸 a鐨勫湴鍧銆
  • c++涓畾涔変簡p鏄竴涓鎸囬拡,鐒跺悗鍚庨潰鐢ㄥ埌鏃p鍜*p鍒嗗埆浠h〃浠涔?
    绛旓細p鏄寚鍚戠洰鏍囩殑鍦板潃锛*p鏄寚鍚戠殑鐩爣锛鍙橀噺锛
  • c璇█涓璸*鏄粈涔堟剰鎬,浠栧拰*p鐨勫尯鍒槸浠涔?
    绛旓細p 濡傛槸鍑虹幇鍦ㄧ畻鏈〃杈惧紡涓紝杩欎釜鏄熷彿灏辨槸涔樺彿锛岃〃绀虹浉涔橈紝濡傛灉鏄嚭鐜板湪澹版槑涓紙濡傚彉閲忓畾涔夛級锛岄偅灏辫〃鏄巔鏄竴绉嶆暟鎹被鍨嬶紝p*琛ㄧず瑕佸0鏄庤繖绉嶇被鍨嬬殑鎸囬拡鍙橀噺銆俻 渚濈劧鍙互琛ㄧず鐩镐箻鐨勮繍绠楋紝涔熷彲琛ㄧず鎻愬彇p鎸囬拡鎸囧悜鐨勪綅缃繚瀛樼殑鍊笺備緥濡傦細int a=9;int *p=a;printf("%d",*p);杩欎釜printf()璋冪敤涓殑*p琛ㄧず...
  • C璇█涓,p,&p,*p鏈変粈涔堝叧绯?
    绛旓細鎴戜滑鐭ラ亾锛宲鏄竴涓鎸囬拡鍙橀噺鐨勫悕瀛楋紝琛ㄧず姝ゆ寚閽堝彉閲忔寚鍚戠殑鍐呭瓨鍦板潃锛屽鏋滀娇鐢%p鏉ヨ緭鍑虹殑璇濓紝瀹冨皢鏄竴涓16杩涘埗鏁般傝*p琛ㄧず姝ゆ寚閽堟寚鍚戠殑鍐呭瓨鍦板潃涓瓨鏀剧殑鍐呭锛屼竴鑸槸涓涓拰鎸囬拡绫诲瀷涓鑷寸殑鍙橀噺鎴栬呭父閲忋傝屾垜浠煡閬擄紝&鏄彇鍦板潃杩愮畻绗︼紝&p灏辨槸鍙鎸囬拡p鐨勫湴鍧銆傜瓑浼氾紝鎬庝箞鍙堟潵浜嗕釜鍦板潃锛屽畠鍒板簳鍜宲鏈変粈涔...
  • C璇█ *p鍜宲鏈変粈涔堝尯鍒晩?涓轰粈涔堟渶鍚庤緭鍑*p=20鍟?
    绛旓細p涓鎸囬拡鍙橀噺锛瀛樺偍鐨勬槸鍙橀噺鍊煎湪鍐呭瓨涓殑鍦板潃锛屽崟鐙殑p琛ㄧず涓涓唴瀛樺湴鍧锛*p琛ㄧず浠巔鍦板潃涓彇鍑哄叾涓瓨鍌ㄧ殑鍊硷紝鍗砪ount鐨勫20
  • C璇█ 濡傛灉鎴戝畾涔変簡涓涓鎸囬拡 int *p 鍜屽彉閲 int p, 浠栦咯涔嬮棿鏈変粈涔堝叧绯...
    绛旓細int *p;int a=1;p=&a;p瀹氫箟鎴愪簡涓涓暣鍨鎸囬拡锛鑰宎瀹氫箟鎴愪簡涓涓垵濮嬪间负1鐨勬暣鍨鍙橀噺銆傛寚閽堟槸鐢ㄦ潵淇濆瓨瀵瑰簲绫诲瀷鐨勫彉閲忕殑鍦板潃鐨勶紝鎵浠=&a;鐨勬剰鎬濇槸鐢鎸囬拡p鏉ヤ繚瀛樺彉閲廰鐨勫湴鍧銆傝屽鏋滃悓鏃跺畾涔塱nt *p;int p;浼氬彂鐢熺紪璇戞椂閿欒锛屽洜涓簆閲嶅瀹氫箟浜嗐
  • c璇█涓,p涓鎸囬拡,閭d箞*p鍜&p鏄竴鏍风殑鍚,浠涔堝尯鍒
    绛旓細姣斿int *p(澹版槑p涓篿nt鍨嬫寚閽堝彉閲)锛涘湪璋冪敤鎸囬拡鍙橀噺鐨勬椂鍊锛*p琛ㄧず鎸囬拡鍙橀噺p鎵鎸囧悜鐨勫彉閲忕殑鍊硷紝姣斿int a=5,b; int *p;(澹版槑p涓篿nt鍨嬫寚閽堝彉閲)锛宲=a; b=*p;锛堟妸p鎵鎸囧悜鐨勫彉閲忕殑鍊硷紝鍗砤鐨勫艰祴缁欏彉閲廱锛夈傚浜&p锛屽垯鏄唬琛ㄥ彉閲弍鐨勫湴鍧锛屾樉鐒跺拰浠ヤ笂*p鐨勪袱绉嶆剰鎬濋兘涓嶄竴鏍 ...
  • 鎸囬拡p鍝,杩欎釜*p鏄竴涓叾浠鍙橀噺鐨勫湴鍧鍚?閭d箞p鍙堟槸鍟?
    绛旓細P灏辨槸鎸囬拡锛屽畠鎸囧悜浠讳竴鍦板潃锛*P灏辨槸P鎵鎸囧悜鐨勯偅涓厓绱
  • c璇█,濡傛灉瀹氫箟char * *P,閭d箞*P鍜孭鍒嗗埆浠h〃浠涔堟剰鎬濆憿?
    绛旓細璋冭瘯涓嬮潰璇彞鐪嬬粨鏋 char c='a';char *pc=&c;char **ppc=&pc;printf("%d,%d,%d,%d,%d\n",c,pc,ppc,*ppc,**ppc);涓涓甯稿彉閲廲鏈変竴涓湴鍧锛堜緷鐢佃剳涓嶅悓缁撴灉涓嶅悓锛屾垜鐨勭數鑴戜笂鏄1244996锛夊拰鍙橀噺鍊'a'锛岃鍙栧緱鍏跺湴鍧灏辫涓涓寚閽堬紝鍔犱竴棰楁槦锛屽嵆*pc=&c锛岃鎸囬拡pc鏈韩涔熸槸涓涓鍙橀噺锛...
  • 扩展阅读:一张图看懂万能表 ... 指针++ p ... 一张图看懂指针万用表 ... p是指针还是指针变量 ... 字符串中的指针 p p++ ... 自变量是x还是y ... 指针变量p和*p的区别 ... 星号p和p的区别 ... c语言中指针p和 p的区别 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网