⑴ 神一般的c語言指針,你看懂多少
不說的太玄乎,比如說張三、李四兩個人住在同一個樓里的兩個不同房子里,兩人分別持有兩間屋子的鑰匙,張三是個暴發戶,偏偏喜歡把錢放家裡(1000萬),某天李四動了賊心想要去偷張三的錢,於是他趁張三睡著偷了他的鑰匙並去配了一把後歸還張三,這樣李四就可以在張三不知情下拿走張三的錢。張三李四對應兩個對象,兩個對象分別持有打開各自家門的鑰匙(指針),李四復制了張三的鑰匙(對象持有兩個指針)。
指針的妙用就在於他可以通過地址操作地址指向的對象(C語言叫結構體,java叫對象),通過指針可以做到一個函數改變多個變數值而不必分別寫函數返回值給變數。
⑵ c語言中的指針
const int *p這種寫法,p是指向const對象的指針。
int * const p這種寫法,指針為const,而不是它指向的對象為const。
指向const對象的指針(自以為指向const的指針——語出《C++ Primer》)
怎麼寫?const double *cptr;
const限定了cptr指向的對象的類型,而並非cptr本身。也就是說,cptr本身並不是const,允許給cptr重新賦值。不能通過cptr的解引用來修改其指向的對象(可以非const)的值。
(1)如果指針指向const對象,則不允許用指針來改變其所指的const值。
(2)把一個const對象的地址賦給一個普通的、非const對象的指針也會導致編譯時的錯誤。
(3)不能使用void*指針保存const對象的地址,而必須使用const void*類型的指針保存const對象的地址。
(4)允許把非const對象的地址賦給指向const對象的指針,此時不能通過指針修改其值的行為都會導致編譯時的錯誤。但是可以通過原變數名來修改其值。不能保證指向const的指針所指對象的值一定不可修改。所以「如果cptr是一個指向const對象的指針,那麼*cptr在程序運行期間始終不變」這種說法是錯誤的。
另外,虛機團上產品團購,超級便宜
⑶ c語言的兩個指針例子
個人認為:
(1)printf(PF,a,*a,a[0],&a[0],&a[0][0]); //a、&a[0]表示整個數組的起始地址,其他三個表示數組第0行的起始地址跟整個數組的起始地址相同
printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);//a+1、&a[1]表示數組第1行的起始地址,其他三個表示數組第1行第0個數的地址跟數組第1行的起始地址相同
printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]); //同上,第2行
printf("%d,%d\n",a[1]+1,*(a+1)+1); //a[1]+1與*(a+1)+1都表示數組第1行第1個數的地址
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));//這二個指針都表示數組第1行第1個數的值
(2)b[10]是已經申請好的空間,不能改變其地址
⑷ C語言中關於指針的問題
你肯定編譯過不了,「b = a」 是會報錯的。兩個結構體之間怎麼可能這樣寫。
⑸ C語言程序設計兩個指針疑問,求解答 謝謝
(int *)malloc(size(int))
size(int)表示計算一個整形數據的位元組數
malloc(N) 表示分配一塊 N 個位元組的內存空間
因此malloc(size(int)) 就表示分配一塊整形數據的空間
(int *)表示強制類型轉換為指針,且該指針指向的存儲空間是整形空間
因此,整個意思就是將指針 P 指向一塊分配好的整形存儲空間.
59.若有int *p,a[10];p=a; 則下列寫法不正確的是
A.p=a+2 B a++ C *(a+1) D p++
這個剛剛我調了一下,你說的對,B不正確,編譯無法通過,而C是正確的,編譯可以通過。原因正如你所說
⑹ C語言指針
我估計你不理解的主要是下面的這兩個定義吧。
typedef int (*FUNC1)(int in);
typedef int (FUNC2)(int*,int*,int*);
其實這里第二個定義寫錯了,應該是
typedef int (*FUNC1)(int in);
typedef int (*FUNC2)(int*,int*,int*);
這兩個定義的意思是說定義了兩個函數指針的類型,所謂函數指針類型是指,通過定義函數指針類型的變數,就可以像定義普通變數那樣來定義一個函數指針。
比如,在有了上述定義之後,我可以直接定義:
FUNC1 fun1;
這樣,fun1就是一個函數指針的變數了,也就是說,首先fun1是一個指針變數,它所指向的對象是一個函數的首地址,而這個函數還必須有以下特徵:它具有兩個參數,分別都是int類型的,同時這個函數的返回值必須也是int類型。
(上面這些就是對這句話的解釋:typedef int (*FUNC1)(int in))
我想知道了這些以後,你應該可以自己理解上面的程序了,一定沒有問題的:)
⑺ C語言關於指針的問題。第7題 看不懂倒數後兩句,請指教。
很明顯選B,功能和庫函數strcmp一樣,是比較兩個字元串的大小
難點無非是在於循環條件的理解
*s&&*t&&*t++==*s++
*s和*t很容易理解就是判斷兩個指針有沒有指向字元串結束符'\0'
*t++==*s++就是判斷兩個指針指向的字元是否相等,並且將指針後移
也就是說當兩個指針指向的字元不相等,或者有指針指向了字元串結束符時,結束循環,直接輸出兩個指針指向內容的差值
⑻ c語言中兩個指針可不可以直接比較值
可以比較,比如
int a[2] = {2,1};
int *P1 = &a[1];
int *P2 = &a[2];
如果指針指向的存儲值比較,就是,*P1>*P2;
如果是指針地址比較,就是,P1<P2;
⑼ C語言編如何寫指針函數
1
#include<iostream>
using namespace;
void main()
{
int a=0,b=0;
int *s=a;int *p=b;
cout<<「please the two numbers」;
cin>>a;
cin>>b;
int fun(int *a,int *b)
{
if(*a==*b)
{
cout<<"different\n";return 1;
else cout<<"same\n"; return 0;
}
fun(s,p);
}
include<iostream>
using namespace std;
void main()
{
int a[10]={0};
int i=0,j=0,k=0,p=0,m=0;
int *x=a;int *n=a;
for(;i<=9;++i)
{
cout<<"input the "<<i+1<<"number(s)";
cin>>a[i];
}
int fun(int *a)
{
for(;*x!=null;++x)
for(;m<=9;++m)
{
if(*x<a[m]) break;
n=x;
}
cout<<"the max is"<<*n;
}
⑽ C語言---沒時間不想做了!
1、 指針和一般變數一樣都有兩個值:一個是它在內存中的地址值,另一個是它所存放的數據值。 對
2、 指針存放的值就是它所指向的變數的地址值。 對
3、 指向int型變數的指針不能使用double型變數的地址值進行賦值。 對
4、 定義指針的說明語句中,在指針名前邊的*,與執行語句中在指針名前邊的*具有相同功能。 錯
5、 在給指針賦值時,要求指針與被賦值的地址值類型相同,級別一樣。 對
6、 數組名是一種地址值,它可以用來給指針賦值,但要求類型相同和級別一致。 對
7、 任何兩個指針進行比較運算是無意義的。 錯
8、 指針運算實際是地址運算,指針加一就是實際的地址值加一。 錯
9、 數組元素可以使用下標表示,也可以使用指針表示。 對
10、 指針數組的元素可以是不同類型指針的集合。 錯
二、 填空題。
1、單目運算符&後跟變數名,表示是該變數的(地址) ,單目運算符*後跟指針名,表示該指針的 (對象值)。
2、指針用來存放某個變數的 (地址)。
3、已知:char *c=」good」;則printf(「%s\n」,c)輸出為 good,printf(「%s\n」,c+1)輸出為 亂碼。
4、若有定義:int a[10],*p=a;則*(p+5)表示 a[5]的值。
5、若有定義:int* p;則*p表示_______指針變數_______ 。