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