c中指標怎麼用,c語言中指標怎麼使用

2021-05-27 22:24:00 字數 5773 閱讀 9353

1樓:倒黴熊

int *p; //宣告一copy個指向int的指標pint a;

a= 3;

p=&a;

printf("%d",p); //列印a的地址printf("%d",*p); //列印a的值*p = 4; //改變a的值。

printf("%d",a); //列印a的值為4

2樓:匿名使用者

推薦看書《c和指標》,這裡最好的回答吧,指標可不是一天兩天能夠學會的

c語言中指標怎麼使用?

3樓:大野瘦子

1、使用場景

使用指標時,必須將它指向一個變數的地址或者為它分配

空間方能使用,如下所示:

#include

#include

int main(int argc, char const *argv)

;int *b,*d;

int c=2;

int *e=a; //e指向a陣列首地址

//*b=2; 無法直接初始化

//printf("%d\n", *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\n",*e,*b,c,*d);

2、型別說明

(1)int *a :表示一個指向int型變數的指標,指向的是變數的地址單元

(2)char *b:表示一個指向char變數的指標

*a表示的是這個指標指向地址的值,a為此指標本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:

int nums[5]=;

int *a=nums;

printf("%d %d %p\n",*a,*(a+1),a);

指標的運算

指標指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指標之間的運算一般為值運算和地址運算

(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。

int nums[5]=;

int *a=nums;

(2)地址運算:通過a+i的方式.指標會指向a的下i個地址。

int nums[5]=;

int *a=nums;

a=a+2;

printf("%d\n",*a);

結果輸出2。

4樓:圓隨緣滅

1、指標指向變數:

下面有這樣一個**塊:

int main()

void test(int x,int y)

最後輸出的結果還是a=10,b=15。

因為在函式呼叫時,實參和形參之間只是值傳遞。

但我們使用指標結果就不一樣了,如:

int main()

void test(int * x,int *y)

輸出結果a=15,b=10。變數a和b的值發生了交換。

這是因為我們利用指標訪問變數的儲存單元,間接修改變數的值。

2、指標指向陣列:

定義一個陣列並初始化,int array[5]=,定義一個指標變數並把陣列的地址賦給它,int *p=array,注意陣列名就是陣列的地址,而且陣列的地址就是首元素的地址。

因此我們的指標變數就指向了陣列的首元素,*p=2。如果把(p+1),那麼指標變數就指向了陣列的下一個元素5,因此我們可以利用指標來遍歷陣列的各個元素:

int main()

;int *p =array;for(int i=0;i<5;i++)return 0;}

3、指標指向字串:

我們都知道用陣列儲存字串,如char name[20]="jack",上面已經簡單講述了指標指向陣列,所以我們可以這樣做,char *name="jack",指標變數指向字串的首個字元並可以依次訪問字串的各個字元。

4、指標指向函式:

我們需要知道怎樣表示一個指標指向函式,說白了就是語法要正確,下面我也取一個**塊來說明一下:

int sum(int x,int y)

int main()

不難發現上面**塊里語句(*p)(a,b)可以用p(a,b)來代替,因為p和sum就是一樣的,只是用前者可能更容易理解一點。

而我們要知道怎樣定義一個指標指向函式,int (*p)(int,int)這是固定寫法,前面的int是指標將來指向的函式的返回值的型別,如果沒有函式返回值,那就是void,後面括號裡的兩個int當然就是指標將指向的函式的形參。

5、指標指向結構體:

我們首先首先定義一個結構型別,

struct student

;再根據型別定義結構體變數struct student stu=;

定義一個指標指向結構體型別,struct student *p;把結構體變數stu的地址賦給指標變數p,p=&stu;

我們可以有3種方式來訪問結構體中的屬性ages:stu.ages=15;(*p).ages=15;p->ages=15;不過第三種方式在c語言中只能用來指向結構體。

5樓:匿名使用者

我是這樣理解的:

在c語言中,你需要定義變數,那麼你所定義的這個變數本身你要理解兩層含義:

(1)變數中的值是多少?有了值我們可以直接拿變數參與運算,eg. int a=5;在計算的時候a就表示5;

(2)變數儲存在記憶體中的什麼位置?變數的儲存位置,就是變數的地址,那麼這個地址可以用指標來儲存,eg. int a=5, *p=&a; 在這裡p就是指標變數,儲存了變數a的地址,這個時候你要是用a變數的值,即可以直接用a,也可以用*p,*p是通過p這個指標(也就是a的地址),間接的找到a,在程式中*p與a是等價的。

6樓:匿名使用者

指標是指向地址的,所以你對指標修改也會影響到原地址的值,所以當你需要在函式裡修改函式外的變數時可以考慮指標,當然指標還可以連線結構體裡的節點之類的,後面還有跟函式有關的,只要多揣摩就會了解了

7樓:欣夢魂

指標可以理解為地址即指向地址的指標,在使用之前要明確三個問題,指標的型別,指標指向的型別,指標指向值的記憶體區域。通過傳遞值的地址來傳遞值

8樓:我是張玉柱

就是地址的地址,之後會學到指標型函式就是函式引數是指標型別的,我們平時學的是int ,float等等,還會學到函式指標就是呼叫函式的地址。

c語言指標用法?

9樓:匿名使用者

記憶體理解為一間旅館

變數理解為旅客

指標就是每間客房的號碼

你作為旅館老闆,想叫某位客人來吃飯.不用記得他的名字,只要知道他的門牌號就行.

10樓:大野瘦子

1、使用場景

使用指標時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:

#include

#include

int main(int argc, char const *argv)

;int *b,*d;

int c=2;

int *e=a; //e指向a陣列首地址

//*b=2; 無法直接初始化

//printf("%d\n", *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\n",*e,*b,c,*d);

2、型別說明

(1)int *a :表示一個指向int型變數的指標,指向的是變數的地址單元

(2)char *b:表示一個指向char變數的指標

*a表示的是這個指標指向地址的值,a為此指標本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:

int nums[5]=;

int *a=nums;

printf("%d %d %p\n",*a,*(a+1),a);

指標的運算

指標指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指標之間的運算一般為值運算和地址運算

(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。

int nums[5]=;

int *a=nums;

(2)地址運算:通過a+i的方式.指標會指向a的下i個地址。

int nums[5]=;

int *a=nums;

a=a+2;

printf("%d\n",*a);

結果輸出2。

11樓:tel有你有我

給你你個簡單的例子吧 好好體會一下 這個例子比較全#include

void swap(int *p1,int *p2);

main()

void swap(int *p1,int *p2)//指標的交換

12樓:匿名使用者

指標就是地址。把握住地址的變換,尤其要把握住頭指標,指標如果弄懂了,其實是很簡單、很方便的、好好看看書、多實踐、加油、、、

13樓:匿名使用者

這個確實有點複雜,特別是二維陣列,要多程式設計實踐

14樓:姚詩邰書桃

#include

#include

#include

void

sort(char

*a,intn){

inti,j;

char

*temp;

for(i=0;i這樣

其中char

*temp;

temp=a[i];

a[i]=a[j];

a[j]=temp;

做了修改

原因如下:未修改前temp是一個字元變數,而*a[i]是指標a[i]所指向的內容,就把需要交換的字串的首字元交換了。

你要交換的是指標或者說是地址,而不是指標裡的內容。這就是問題所在。

在temp前加*就表示temp也是個指標,再把a[i]前的*去掉,就實現了交換指標地址的目的。

指標的宣告要加*例如

int*a;

使用的時候如果事指標操作則不要帶*例如

char*a=

「hank」;

a++;此時a指向的字串就變成了「ank」

涉及到指標指向的內容的要加*例如

charb=

*a;指向陣列的指標,例如

intb[10];

int*a=b;

a就是b[0]的地址*a就是b[0]的內容a+1就是b[1]的地址依此類推

又如char*a=

"hank";

那麼通過a就能得到整個字串"hank"

*a是h

*(a+1)是a

...strcmp是c語言函式庫中的函式

雖然傳參傳的是指標,但是具體比較的時候比較的是裡面的內容。具體涉及到指向陣列的指標的應用。因為c中沒有string型別,所以就只能使用char型別的指標來表示字串。

c語言中指標和引用的區別,C語言中指標和引用的區別

指標,全稱為指標變數,是用來儲存記憶體地址的一種變數。程式中,一般通過指標來訪問其指向的記憶體地址中的內容 資料 引用,是c 中提出來的一種新的使用變數的方式,即,給實際變數起個別名,通過這個別名來引用實際的變數。標準c中不支援變數的引用。這兩個概念沒有任何相關性。指標是實實在在的變數,有自己的記憶...

c語言中指標在程式設計中有什麼作用,C語言中指標在程式設計中有什麼作用?

指標,太有用了,也最難管理的,好處多的是,比如,函式傳遞,引數是結構時,傳指標可以提高效能 可以通過傳遞和儲存指標,通過資料的相對位置來訪問資料,而不用定義不同的n個變數來,分別使用。比如 int a 10 那麼用a 0 a 9 即可訪問裡面的10個資料,而只需要知道a的地址即可,操作方便,而且在函...

C語言(不是C中指標的難題,C語言(不是C )中指標的難題?

不動態分配空間,只給個指標值的話,需要輔助的儲存單元char data0,data1,淺拷貝 include include define max chars 100 假設浮點數轉成字串最大長度是100個字元,可以自己修改 int main include int main include incl...