當前位置:首頁 » 編程語言 » c語言指針如何定義和使用
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言指針如何定義和使用

發布時間: 2022-04-24 00:36:00

㈠ 論述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。對於數組,指針是指向數組的首地址。

㈡ 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);

(2)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語言中指針怎麼使用

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

(3)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++的重要元素之一,是變數的一種類型,存放的是指定類型數據的地址,而同類型變數存放的是數據。

指針變數:就是一個變數,其值是可變的,與整形變數、浮點變數等等的命名規則完全相同。 「指針」是概念,「指針變數」是具體實現。指針類型說明,即定義變數為一個指針變數; 指針變數名; 變數值(指針)所指向的變數的數據類型。

(4)c語言指針如何定義和使用擴展閱讀:

與其他高級編程語言相比,C 語言可以更高效地對計算機硬體進行操作,而計算機硬體的操作指令,在很大程度上依賴於地址。指針提供了對地址操作的一種方法,因此,使用指針可使得 C 語言能夠更高效地實現對計算機底層硬體的操作。另外,通過指針可以更便捷地操作數組。在一定意義上可以說,指針是 C 語言的精髓。

㈤ C語言指針變數定義

根據你的定義,使用LinkList定義的變數是指針變數,而加上*即LinkList *C表示的是指向指針的指針,表示二級指針變數。

你的合並函數是一個沒有返回值的函數,所以你在函數體內更改C要達到更改實參的效果,你必須傳入實參的地址。

如果是一級指針,C接收實參指向的對象地址,如果此時在函數體內對C進行賦值,只是改變了函數體內C的指向,實參還是指向原來的地址。函數內是改變不了實參C本身的指向,只有傳入實參C變數本身的地址,那麼形參就要定義指向指針的變數來接收實參。

以上是一種方法,另外一種方法就是通過函數返回值,返回新合並的鏈表的頭。那函數類型就可以改為:

LinkList MergeList(LinkList a, LinkList b)。

這可以多練習好好理解一下。

㈥ C語言指針的定義

指針就是地址。
你說的是指針變數。
整形變數,浮點變數,字元變數,指針變數。通過起名的規律就知道指針變數是儲存地址的。
指針變數和其他變數的用法一樣,作用域一樣。在一個子涵數中定義指針變數,是局部變數,其他函數是不能用的。
不要把指針變數想的太復雜,地址(指針)也是數據,和其他字元數據,整形數據一樣,沒什麼差異。
當然,全局變數的指針變數當然可以多函數使用。
指針的定義:地址。
指針變數的定義:存儲指針的變數。

㈦ C語言的指針怎麼用啊

在你提供的代碼上進行了增加,我感覺你們老師可能是想讓你們把指針用在數組上吧,對於一個指向數組的指針p,p++指向數組的下一個元素。此外,使用指針可以很好的提升代碼執行效率。有問題可以互相交流。
#include <stdio.h>
#include <stdlib.h>

int square(int a, int b)
{
return a*b;
}

int main()
{
int i, j, l, w, s = 0, number = 1, max;

int *length = &l, *width = &w, *p = &i;

printf("請輸入您所需測量田地的數量: \n");

scanf("%d",p);

int a[*p];
int *y = a;

for(j = 0; j < *p; j++)
{
printf("請輸入第%d塊田的長和寬: \n", j+1);
scanf("%d %d",length,width);
*(y+j) = square(*length, *width);
s = s + *(y+j);
max = *y;

if( *(y+j) > max)
{
max = *(y+j) ;
number = j+1;
}
}

for(j = 0; j < *p; j++)
{
printf("您第%d塊田的面積為%d:\n",j+1,*(y+j));
}

printf("您的田地總面積為: %d \n", s);
printf("您最大面積一塊第為第%d塊,面積為%d !!!", number, max);
return 0;
}

㈧ c語言結構體指針如何定義和使用

struct stu
{
char name[20];
long number;
float score[4];
} ;
再定義指向結構體類型變數的指針變數:
struct stu *p1, *p2 ;
定義指針變數p 1、p 2,分別指向結構體類型變數。引用形式為:指針變數→成員;

㈨ C語言中指針的概念和用法

1.記住一些關鍵字
2.熟練使用輸入輸出
3.學好數組和指針
指針就是內存地址,記住這點很有幫助

㈩ 如何正確地使用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語言中只能用來指向結構體。
綜上所述,指針的基本用法就是這幾種,還有些用法不常見的在此就一一例舉了,有興趣的話可以去翻閱相關的資料。