Ⅰ c語言指針變數比較
首先要 分清, 是在 聲明中 還是在語句中。
聲明中,例如:
int a=1, b=2;
int *p, *q; // 聲明 *p 和 *q 是指針,用於指向 int 型數據。
p=&a; q=&b; //語句, p 和 q 是指針 指向的數據 的地址,p 指向 a, q 指向 b.
if ( p < q) printf("...."); // 語句, p 和 q 是 "地址", 地址大小的比較。即 &a,&b 的比較。
若是 if ( *p < *q) printf("...."); // 語句, *p 和 *q 是 "數值「 的比較,即 a,b 的比較,現在 a=1,b=2。
即,語句中 有星號的是 數值,沒星號的是地址。
你的2道題里,p,q 是 地址。是地址值的比較。
Ⅱ C語言 指針變數與普通變數的區別
主要是指針有效率. 比如把 一個長 1M 的字元串發給子函數, 讓它輸出到文件.這個傳遞過程 你傳指針就比傳字元串的效率高百萬倍!!
Ⅲ 關於C語言中指針變數的問題
int a = 15, b = 99, c = 22, d = 45;【a=15,b=99,c=22,d=45】
int *p = &a;【變數p指向變數a,p指向的單元的內容(*p)是15】
int *q = &b;【變數q指向變數b,q指向的單元的內容(*q)是99】
*p=c;【給p指向的單元賦值,而不是給p賦值,由於p指向變數a的單元,則相當於給a的內容賦值c的值】
*q=d;【同理】
後面語句中的*p賦值和變數定義語句中的*p賦值是不同的,變數定義int *p=&a;可以分解寫成int *p; p=&a;是它的簡寫形式,簡寫形式是給p賦值而不是*p,因為在變數定義語句中的*表示的是變數類型而不是指p指向的單元的意思,可以看成:int* p=&a;這里的p變數類型是int *,後面的賦值是給變數賦值。
Ⅳ C語言中「指針」和「指針變數」的區別是什麼
1、概念不同
「指針」是概念,「指針變數」是具體實現,指針也是一個變數,所以需要進行定義,而對於指針的定義,與一般變數一樣。
2、 存放地址不同
一個變數的(內存)地址稱為該變數的「指針」,通過指針能找到以它為地址的內存單元。而指針變數是用來存放另一個變數的地址的(即指針)。
(4)c語言指針變數擴展閱讀:
指針和指針變數的關系
1、指針就是地址,地址就是指針。
2、地址就是內存單元的編號。
3、指針變數就是存放內存地址的變數。
4、指針和指針變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指針變數簡稱為指針,實際他們含義並不一樣。
註:
指針里存的是100. 指針:地址 - 具體。
指針里存的是地址,指針:指針變數 -可變。
指針的好處:
1、直接訪問硬體
2、快速傳遞數據(指針表示地址)
3、返回一個以上的值返回一個(數組或者結構體的指針)
4、表示復雜的數據結構(結構體)
5、方便處理字元串
6、指針有助於理解面向對象
Ⅳ C語言中指針變數的問題
int
a[10]是a[0~9];而後綴++是先用後加。
所以這句*p++=i;和很重要。每次循環是a[n]=n;最後次執行是a[9]=9,但p已經指向a[10](越界),才跳出循環。
此時p=a+10,*p=a[10]。
所以會出現指針變數跳出到數組以後的內存單元
和
必須加上第二個p=a,沒有了第二個p=a怎麼出來的答案這么不靠普。
建議初學者,一步步來,搞懂基本,對於++和數組名與指針的關系,這些有關地址的一點點來,要是幾種混一起,容易亂。
Ⅵ c語言指針變數
#include <stdio.h>
#include <malloc.h>
int main(void)
{
char *s, *t, *ch;
int n = 0, i;
s = t = NULL;
ch = (char *)malloc(sizeof(char));
while (scanf("%c", ch))
{
if (*ch == 10)
break;
n ++;
t = s;
s = (char *)malloc(sizeof(char) * n);
if (t != NULL)
{
for (i = 0; i < n - 1; i ++)
s[i] = t[i];
free(t);
t = NULL;
}
s[n - 1] = *ch;
}
puts(s);
free(ch);
free(s);
return 0;
}
Ⅶ C語言指針變數定義
根據你的定義,使用LinkList定義的變數是指針變數,而加上*即LinkList *C表示的是指向指針的指針,表示二級指針變數。
你的合並函數是一個沒有返回值的函數,所以你在函數體內更改C要達到更改實參的效果,你必須傳入實參的地址。
如果是一級指針,C接收實參指向的對象地址,如果此時在函數體內對C進行賦值,只是改變了函數體內C的指向,實參還是指向原來的地址。函數內是改變不了實參C本身的指向,只有傳入實參C變數本身的地址,那麼形參就要定義指向指針的變數來接收實參。
以上是一種方法,另外一種方法就是通過函數返回值,返回新合並的鏈表的頭。那函數類型就可以改為:
LinkList MergeList(LinkList a, LinkList b)。
這可以多練習好好理解一下。
Ⅷ C語言指針基本概念及其指針變數的定義是什麼
在C語言里,指針是一組內存的頭地址,可以存一個數,一個字元,也可以是一個數組.
變數,就是像定義一個整型變數一樣的,定義的是一個指針型變數.
Ⅸ c語言指針類型定義指針變數
LinkList 是Node型指針,Linklist *s 裡面 s是一個數組,數組里存放的是Node型指針,*s是數組第一個元素
Ⅹ C語言指針變數
假設a
是一個抽屜,裡面只能放一個整數,(就是所謂的int
,這個不重要),當這個抽屜存在的時候,它就已經有一個編號了(就是地址),這個號是系統編的,不能更改。而p
是另一個抽屜,裡面只能放編號,p=&a,就是把a的編號放到p
這個抽屜里,現在如果你知道了p
里放的編號,你就可以按照這個編號找到這個對應的抽屜。這就對應上了,不知道你能看明白不?
a
就是10
,這里的10
就是a
,它倆是同一個東西,當然放在同一個地方,這個地方的序號比如1000,這個序號保存在p
里。
a
和
10在這里就是一碼事,它倆指的是同一個東西,比如一隻白狗叫a,這個a
就是指這只白狗,a和這只白狗此時就是一回事,同一個東西在某一時刻還能在倆地方嗎?