當前位置:首頁 » 編程語言 » c語言善於利用指針學習筆記
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言善於利用指針學習筆記

發布時間: 2022-04-25 20:06:31

A. 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);

(1)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。

參考資料來源 :指針-網路

B. C語言指針的用法是什麼

指針是C語言中廣泛使用的一種數據類型。運用指針編程是C語言最主要的風格之一。

利用指針變數可以表示各種數據結構;能很方便地使用數組和字元串;並能象匯編語言一樣處理內存地址,從而編出精練而高效的程序。指針極大地豐富了C語言的功能。

學習指針是學習C語言中最重要的一環,能否正確理解和使用指針是我們是否掌握C語言的一個標志。

同時,指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指針也是不難掌握的。

C. 論述C語言中指針的概念和作用,並舉例說明

1、指針概念:變數的地址(計算機內存位元組的編號)叫做指針,存放變數地址的變數叫指針變
量,
簡言之,指針是用來存放地址的。
2、作用:指向這個變數或數組的首地址,是變數的間接引用方式。其值如果改變,變數的值或數組元素的值也會跟著改變。程序對變數的操作實際上是對變數所在的存儲空間讀取和寫入數據。方便對變數的操作。
舉例說明:
int
a=3;/*定義一個整型變數a,並賦初值3*/
int
*p;/*定義一個指針變數P*/
p=&a;/*讓p指向a的首地址,也就是a的地址*/
程序為a分配一個2個位元組的存儲單元,假如2個位元組的地址分別為(ABCD1和ABCD2,唯一),那麼p裡面放的值就是ABCD1,不是3。這時可通過p直接引用a,實際上*p=3。以後不管a存放在內存中的哪個地方,只用通過調用p就可以引用a。這時如果令*p=4,則最後的a值也為4。對於數組,指針是指向數組的首地址。

D. 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。

參考資料來源 :指針-網路

E. 關於C語言指針問題學習,怎麼學好C語言的指針

指針,就像學校的信箱一樣。你跟別人說,給我寫信,寄到XXXX大學509號信箱,別人怎麼知道509信箱是啥?不過他不用管,只管把信發過來,到時候你去箱子里取東西就是了。只要這么想,就拿指針當信箱吧,往那裡送信行了,其它不管,一切問題就簡單了。 c與機器聯系緊密,抽象程度不是太高,所以機器層面的地址也拿過來了,改名叫指針。 遇到指針,要讀成「地址變數」,其實指針就是一個存放整數(地址就是一個整數)的變數而已,多少級都是如此。 比如,有一間房子,它的地址是:人民路108號。這個房子相當於一個變數。如果它是普通變數,則房子里可能今天住的是張三,明天住的是李四。張三、李四就是這個變數的值。通過訪問這間房子,我們可以直接找到張三或李四。如果它是一個指針變數,則房子里不住具體的人,而是放一張紙條,上面寫:『南京東路77號』。『南京東路77號』是一個什麼東西?是一個地址。通過該地址,我們繼續找,結果在『南京東路77號』里找到張三。變數的存儲的值可以改變,指針變數的值同樣可以變更:過一天,我們再去訪問這個房子,紙條變了『珠海路309號』,通過它,我們找到的是另一個人。 「&和*」,它們是一對相反的操作,』&』取得一個物的地址(也就是指針本身),』*』得到一個地址里放的物(指針所指向的物)。這個東西可以是值(對象)、函數、數組、類成員(class member)等等。 理解什麼是'多級指針': 有一個事件:C住在了某酒店的房間里,他的房間號碼是1001。B知道C的房間號碼是1001,而B住的房間號碼是1081。現在A想要找到C,但是A不知道C的房間號碼是多少。但是A知道B一定知道C的房間號碼。所以A去1081房間去找B,A問B:C的房間號碼是多少。B告訴A:C的房間號碼是1001。這時候A就可以直接去1001號房間找到C。

F. c語言學習方法,指針怎麼學非常難嗎

我覺得你首先得明白什麼是指針。指針就是內存中存放變數的地址。是直接和內存打交道的。
在C語言中,你聲明一個變數int a = 3;這個變數a在會佔用一塊內存區域,標示這個內存區域的就是內存地址,比如是0x20003000,在這個地址中儲存了變數的數值3. 在C語言中就是用指針來表示這個地址的。對應前例,如果再聲明一個指針int *b; b就被稱作指針變數,專門存放地址指針的。

b=&a;就把存放變數的內存地址0x20003000賦值給了b,如果對這個地址的內容進行修改,*b=4;
那麼就相當於把之前a變數的內容修改了,此時,a就變為了4.

你可以把變數看做代號,例如「張三家」,指針就是絕對的地址,「XX市XX路XX號XX單元XX樓xx門」。
張三家的茶幾,也就是「XX市XX路XX號XX單元XX樓xx門」的茶幾。當張三家搬走後,新來了李四家。那麼「XX市XX路XX號XX單元XX樓xx門」的茶幾,就是李四家的茶幾了。

G. C語言指針基礎的筆記

p1 p2本來沒有任何關系的,執行了以上語句之後,p1 p2是兩個不同的指針,但是這兩個指針指向了相同的內容,就是整數a

H. 如何正確地使用C語言的指針

指針是C語言中的精髓,它能直接對物理地址進行訪問,具有雙重功能,是嵌入式設計中必不可少的一門語言。C語言功能強大的主要原因就是具有指針結構。指針是一種特殊的數據類型,直接指向目標的存儲地址,實現直接訪問對象存儲空間的功能。
1、指針指向變數:
下面有這樣一個代碼塊:
int main()
{int a=10;int b=15;test(a,b);printf("a=%d,b=%d\n",a,b);}
void test(int x,int y)
{int tmp;tmp=x;x=y;y=tmp;}
最後輸出的結果還是a=10,b=15。因為在函數調用時,實參和形參之間只是值傳遞。但我們使用指針結果就不一樣了,如:

int main()
{int a=10;int b=15;test(&a,&b);printf("a=%d,b=%d\n",a,b);return 0;}
void test(int * x,int *y)
{int tmp;tmp=*x;*x=*y;*y=tmp;}
輸出結果a=15,b=10。變數a和b的值發生了交換。這是因為我們利用指針訪問變數的存儲單元,間接修改變數的值。
2、指針指向數組:
定義一個數組並初始化,int array[5]={2,5,12,7,8},定義一個指針變數並把數組的地址賦給它,int *p=array,注意數組名就是數組的地址,而且數組的地址就是首元素的地址。因此我們的指針變數就指向了數組的首元素,*p=2。如果把(p+1),那麼指針變數就指向了數組的下一個元素5,因此我們可以利用指針來遍歷數組的各個元素:
int main()
{int array[5]={2,5,12,7,8};int *p =array;for(int i=0;i<5;i++){printf("array[%d]=%d\n",i,*(p+i));}return 0;}
3、指針指向字元串:
我們都知道用數組存儲字元串,如char name[20]="jack",上面已經簡單講述了指針指向數組,所以我們可以這樣做,char *name="jack",指針變數指向字元串的首個字元並可以依次訪問字元串的各個字元。
4,指針指向函數:
我們需要知道怎樣表示一個指針指向函數,說白了就是語法要正確,下面我也取一個代碼塊來說明一下:
int sum(int x,int y)
{return x+y;}
int main()
{int a=5;int b=6;int (*p)(int,int);p=sum;int result=(*p)(a,b);printf("The result is %d\n",result);return 0;}
不難發現上面代碼塊里語句(*p)(a,b)可以用p(a,b)來代替,因為p和sum就是一樣的,只是用前者可能更容易理解一點。而我們要知道怎樣定義一個指針指向函數,int (*p)(int,int)這是固定寫法,前面的int是指針將來指向的函數的返回值的類型,如果沒有函數返回值,那就是void,後面括弧里的兩個int 當然就是指針將指向的函數的形參。指針指向函數用起來確實有點抽象,要想熟練運用的話就多去做一些這方面的練習吧!
5,指針指向結構體:
我們首先首先定義一個結構類型,
struct student
{
char *name;
int ages;
};
再根據類型定義結構體變數 struct student stu={"Rose",15};定義一個指針指向結構體類型,struct student *p;把結構體變數stu的地址賦給指針變數p,p=&stu;我們可以有3種方式來訪問結構體中的屬性ages:
stu.ages=15;(*p).ages=15;p->ages=15;不過第三種方式在C語言中只能用來指向結構體。
綜上所述,指針的基本用法就是這幾種,還有些用法不常見的在此就一一例舉了,有興趣的話可以去翻閱相關的資料。

I. 關於C語言中的指針學習

printf("%d\n",(*pointer_1)++); //先輸出(*pointer_1)的值100,之後,再對(*pointer_1)即a做自增運算,a的值變為101。
printf("%d\n",*pointer_1++); //先輸出*pointer_1的值101,之後,再對pointer_1做自增運算,pointer_1指向內存中變數a的下一個內存空間!因為此句比上句少一括弧,故自增的對象不同。
printf("%d\n",*pointer_1); //輸出pointer_1指向的空間的值。但a之後內存值不確定!

*pointer_1++ //先計算*pointer_1,再計算pointer_1++
(*pointer_1)++ //先計算*pointer_1,再對pointer_1指向的變數進行++
*(pointer_1++) //同第一個,先計算*pointer_1,再計算pointer_1++