當前位置:首頁 » 編程語言 » c語言a和p的區別
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言a和p的區別

發布時間: 2022-07-08 00:49:23

Ⅰ 在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