c語言指針的引用
❶ c語言指針引用數組元素,從p=a開始解釋下此程序
1. p=a; //使int*指針p指向數組a的首元素,即a[0]的地址—&a[0]。
2. 第一個for循環語句,就是通過指針p來對數組a的各個元素賦初值,*p的意思就是獲取指針p所指向的內存單元的值,初始就是對a[0]賦初值i,*p++=i,等價於:
*p=i; //對p指向的當前數組元素賦值,等價於a[i]=i;
p++; //指針p自增1,使指針p指向下一個數組元素
當初始化數組a完成後,
3. p=a; //使指針p重新指向數組a的首元素,即指向a[0]。
4. 第二個for循環,就是通過指針p輸出數組a的所有元素到屏幕上了。
總結,通過指針來操作對象,是一種間接訪問變數的方式,有很多的好處,這在以後的編程學習中你會慢慢體會到指針的妙處和精髓。
❷ C語言選擇題 指針的引用怎麼看
其實你的題目裡面寫法就有問題。
若有定義
int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
A.*(p+i) B.*(a+i)
C.p[i] D. *a[i]
應該這樣才對,然後題目定義的指針p指向數組a,也就是指向數組的第一個元素的地址。然後定義的變數i也沒有具體賦值,後面就直接引用了。那我們就認為i為一個在這個題目里有效的數字。
A選項,是取內容,*(p+i)相當於取p指針往後移i個單位的那個地址的內容,是對的。
B選項,a是數組名是不可以改變的,a+i是錯誤的。
C選項,應該也是對的,除非他越界了。
D選項不需要取內容符號*。
❸ C語言中指針和引用的區別
指針,全稱為指針變數,是用來存儲內存地址的一種變數。程序中,一般通過指針來訪問其指向的內存地址中的內容(數據)。
引用,是C++中提出來的一種新的使用變數的方式,即,給實際變數起個別名,通過這個別名來引用實際的變數。標准C中不支持變數的引用。
這兩個概念沒有任何相關性。
指針是實實在在的變數,有自己的內存存儲空間,它可以指向任何有效的變數。
引用是一種形式、方法,定義的引用變數,實際上是原實際變數的另一個名稱(別名),引用變數本身沒有自己的實際存儲空間,操作引用變數,就是在操作實際變數。
如:
❹ c語言中指針怎麼使用
1、使用場景
使用指針時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int a[5]={0,1,2,3,4};
int *b,*d;
int c=2;
int *e=a; //e指向a數組首地址
//*b=2; 無法直接初始化
//printf("%d ", *b);
e=e+2; //移動兩個地址單元
d=&c; //d指向c的地址來表示值
c=4; //修改原c變數的值,d指針的值會發生改變
b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲值
*b=2;//分配空間後可以直接賦值了
printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);
2、類型說明
(1)int *a :表示一個指向int型變數的指針,指向的是變數的地址單元
(2)char *b:表示一個指向char變數的指針
*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:
int nums[5]={0,1,2,3,4};
int *a=nums;
printf("%d %d %p ",*a,*(a+1),a);
(4)c語言指針的引用擴展閱讀:
指針的運算
指針指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算
(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。
int nums[5]={0,1,2,3,4};
int *a=nums;
(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。
int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d ",*a);
結果輸出2。
參考資料來源 :指針-網路
❺ C語言指針怎麼用
在c語言中.指針被用來表示內存單元的地址,如果把這個地址用一個變數來保存,則
這種變數就稱為指針變數。指針變數也分別有不同的類型,用來保存不同類型變數的地址。
嚴格地說.指針與指針變數是不同的,為了敘述方便,常常把指針變數就稱為指針。
內存是計算機用於存儲數據的存儲器,以位元組作為存儲單元.為了能正確的訪問內存單
元,必須為每一個內存單元編號,這個編號就稱為該單元的地址。如果將一個旅店比喻成內
存,則旅店的房間就是內存單元,房間號碼就是該單元的地址。
指針變數定義格式:
[存儲類型]
數據類型
*指針變數名[=初始值]
指針變數一旦定義,必須採用賦值的方式將其與某個變數實體相聯系,才能使用。指針
變數的賦值方式:
指針變數名;&普通變數名;
❻ C語言指針/引用/取值
指針是一個存儲計算機內存地址的變數。從指針指向的內存讀取數據稱作指針的取值。指針可以指向某些具體類型的變數地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。
根據出現的位置不同,操作符 * 既可以用來聲明一個指針變數,也可以用作指針的取值。當用在聲明一個變數時,*表示這里聲明了一個指針。其它情況用到*表示指針的取值。
&是地址操作符,用來引用一個內存地址。通過在變數名字前使用&操作符,我們可以得到該變數的內存地址。
// 聲明一個int指針
int*ptr;
// 聲明一個int值
int val = 1;
// 為指針分配一個int值的引用
ptr = &val;
// 對指針進行取值,列印存儲在指針地址中的內容
int deref = *ptr;
printf("%d\n", deref);
第2行,我們通過*操作符聲明了一個int指針。接著我們聲明了一個int變數並賦值為1。然後我們用int變數的地址初始化我們的int指針。接下來對int指針取值,用變數的內存地址初始化int指針。最終,我們列印輸出變數值,內容為1。
第6行的&val是一個引用。在val變數聲明並初始化內存之後,通過在變數名之前使用地址操作符&我們可以直接引用變數的內存地址。
第8行,我們再一次使用*操作符來對該指針取值,可直接獲得指針指向的內存地址中的數據。由於指針聲明的類型是int,所以取到的值是指針指向的內存地址存儲的int值。
說穿了,指針就是地址吧,這里可以把指針、引用和值的關系類比為信封、郵箱地址和房子。一個指針就好像是一個信封,我們可以在上面填寫郵寄地址。一個引用(地址)就像是一個郵件地址,它是實際的地址。取值就像是地址對應的房子。我們可以把信封上的地址擦掉,寫上另外一個我們想要的地址,但這個行為對房子沒有任何影響。
❼ c語言 指針和引用
在定義中如int *p=&i;是定義了指針的同時給其賦值(p指針指向i),只有定義時可以這么寫,在語句中*p=&i;則是將i的地址的代碼給了*p,也就是p指針指向了i的地址,而不是i;只有*p=i才是p指針指向i;
printf("%d",&i);printf("%d",p);
的結果才是一樣的,都是輸出i的地址。
printf("%d",i);printf("%d",*p);
的結果是一樣的,都是i的值。這一塊內容就是復雜,希望這樣解釋你能明白。
❽ C/C++語言-指針與引用的區別
一、指針:
1.指針的定義:
指針作為實體,是一個用來保存一個內存地址的計算機語言中的變數。指針一般出現在比較底層的程序設計語言中,如C語言。高層的語言如Java一般避免用指針,而是引用。
指針作為數據類型,可以從一個函數類型、一個對象類型或者一個不完備類型中導出。從中導出的數據類型稱之為被引用類型(referenced type)。指針類型描述了一種對象,其值為對被引用類型的實體的引用。
2.* 和 &符號
這個時候能改變a的值,而
改為
就無法改變a的值。
在執行inc(&a);時,系統在內存分配表裡增加了一行「inc 中的val」,其地址為新地址,值為&a。操作*val,即是在操作a 了。
二.引用
1.引用的定義:
(1)引用就是某個目標變數的「別名」,對應用的操作與對變數直接操作效果完全相同。
(2)申明一個引用的時候,切記要對其進行初始化。
2.引用的特點:
(1)傳遞引用給函數與傳遞指針的效果是一樣的。這時,被調函數的形參就成為原來主調函數中的實參變數或對象的一個別名來使用,所以在被調函數中對形參變數的操作就是對其相應的目標對象(在主調函數中)的操作。
(2)使用引用傳遞函數的參數,在內存中並沒有產生實參的副本,它是直接對實參操作;而使用一般變數傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變數是實參變數的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變數傳遞參數的效率和所佔空間都好。
(3)使用指針作為函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重復使用"*指針變數名"的形式進行運算,這很容易產生錯誤且程序的閱讀性較差;另一方面,在主調函數的調用點處,必須用變數的地址作為實參。而引用更容易使用,更清晰。