Ⅰ 在c語言中,int *p,a; *p=&a,和p=&a有什麼區別
#include<stdio.h>
intmain()
{
int*p,a=0xAA;//聲明int指針變數p和int變數a
// *p=&a; //把指針p指向的值改變為變數a的地址,是無效的
//因為a的地址長度為4位元組,而指針p指向的值為int,即兩位元組的。
printf("程序運行前的值 ");
printf("p的地址=0x%X 指針p指向的值=0x%X 指針p自己的值=0x%X ",&p,*p,p);
printf("a的地址=0x%X a的值=0x%X ",&a,a);
*p=a; //指針p指向的值改變為a的值
printf(" 執行*p=a;指令後的值 ");
printf("p的地址=0x%X 指針p指向的值=0x%X 指針p自己的值=0x%X ",&p,*p,p);
printf("a的地址=0x%X a的值=0x%X ",&a,a);
p=&a; //把指針p自己的值改變為變數a的地址,同時指針p指向變數a的值了
printf(" 執行p=&a;指令後的值 ");
printf("p的地址=0x%X 指針p指向的值=0x%X 指針p自己的值=0x%X ",&p,*p,p);
printf("a的地址=0x%X a的值=0x%X ",&a,a);
return0;
}
Ⅱ C語言里,*(&a)==a,&(*p)==p的區別
a和p是變數,&a和*p是表達式,1和0x1000是常量
a和*p表示的都是整形左值,p和&a表示的都是指針型左值,1和0x1000表示整形和指針型右值。(左右值的概念不清的話,google一下)
在內存中,a和p有存儲空間空間,a存放著1,p存放著0x1000,*p和&a沒有空間,他們的運算結果是在寄存器中存放的,1和0x1000也有空間,在程序的常量段存放。
*p按照Stanley Lippman的著作《C++ Primer》中的描述,p是指針變數,*是解引用操作符,*p是一個表達式,含義是「對指針變數p進行解引用操作」,這與表達式&a的含義「取整形變數a的地址」是正好是相反的操作。
Ⅲ C語言 二維數組里a[i]和p[i]的區別
int a[3][3]相當於定義了int** a;當然就和int* p不一樣了。
但是你可以強制轉換(int**)p
Ⅳ C語言指針問題:在定義指針時*p=a和p=a有區別嗎
當然有區別,區別很大,*p=a,就是給指針的表示的地址賦值,也就是賦值給指針指向的存儲單元;而p=a,則表示給指針賦值,也就是指針的地址變成了a。兩者一個指明了具體值大小,一個指明了具體位置。
Ⅳ c語言里 *p=a和p=a的區別
在c語言里 *p=a
是使用在聲明指針變數的同時給它賦初值。p=a;是在已經聲明了指針變數以後,再給它賦初值。這兩者是有區別的,不能通用的。
Ⅵ c語言中*p=&a和p=&a有什麼區別
c語言中*p=&a和p=&a只有一個區別就是指針初始化時間不同。
p=&a:P是1維指針;
*p=&a:P是2維指針;
p=&a示例:
inta;
int*p;
a=5;
p=&a;
printf("valueis:%d.",*p);
(6)c語言a和p的區別擴展閱讀
*p=&a的使用
int a, b, c;
int **p;
a = 5;
b = 6;
c = 7;
p = (int **)malloc(EL_CNT * sizeof(int *));
*p = &a;
*(p + 1) = &b;
*(p + 2) = &c;
for(int i = 0; i < EL_CNT; i++)
printf("value is : %d ", **(p + i));
Ⅶ C語言:p->a,與*p->a有什麼區別
->指針操作符的優先順序非常高,於是*p->a就是*(p->a),取得指針p指向的結構體的成員a(也是指針)指向的第一個元素。p->a是取得p指向結構體的成員a,等價於(*p).a