JNI入門之C C 基礎二

2021-08-20 09:37:27 字數 2541 閱讀 4628

指標有型別,位址沒有型別

位址只是開始的位置,型別讀取到什麼位置結束(不同的型別讀取的位元組數不同)

空指標的預設值為0

1)什麼是空指標

如果 p 是乙個指標變數,則 p = 0;、p = 0l;、p = '\0';、p = 3 - 3;、p = 0 * 17; 、p = null; 中的任何一種賦值操作之後(對於 c 來說還可以是 p = (void*)0;), p 都成為乙個空指標

2) 如何判斷乙個指標是否是乙個空指標?

這可以通過與空指標常量或者其它的空指標的比較來實現(注意與空指標的內部表示無關)。例如,假設 p 是乙個指標變數,q 是乙個同型別的空指標,要檢查 p 是否是乙個空指標,可以採用下列任意形式之一——它們在實現的功能上都是等價的,所不同的只是風格的差別。

指標變數 p 是空指標的判斷:

if ( p == 0 )

if ( p == '\0' )

if ( p == 3 - 3 )

if ( p == null )  /* 使用 null 必須包含相應的標準庫的標頭檔案 */

if ( null == p )

if ( !p )

if ( p == q )

...

3) 空指標常量

0、0l、'\0'、3 - 3、0 * 17以及 (void*)0等都是空指標常量(注意 (char*) 0 不叫空指標常量,只是乙個空指標值)。至於系統選取哪種形式作為空指標常量使用,則是實現相關的。一般的 c 系統選擇 (void*)0 或者 0 的居多(也有個別的選擇 0l);至於 c++ 系統,由於存在嚴格的型別轉化的要求,void* 不能象 c 中那樣自由轉換為其它指標型別,所以通常選 0 作為空指標常量(tyc: c++標準推薦),而不選擇 (void*)0。

指標儲存的是變數的位址,如果儲存的這個變數是乙個指標變數,那麼這個指標就是多級指標.

指標的運算,一般在陣列遍歷時才有意義,基於陣列在記憶體中線性排列的方式

1)      指標運算

void main();

//陣列變數名:

ids就是陣列的首位址

,以下三種表示效果相同

printf("%#x\n",ids);

printf("%#x\n",&ids);

printf("%#x\n",&ids[0]);

//指標變數

int *p = ids;

printf("%d\n",*p);

//指標的加法

p++; //p++

向前移動

sizeof(

資料型別

)個位元組

printf("p的值:%#x\n", p);

//p--;

printf("%d\n", *p);

getchar();

2)通過指標給陣列賦值

void main(){

int uids[5];

//高階寫法

int i = 0;

for (; i < 5; i++){

uids[i] = i;

//早些版本的寫法

int* p = uids;

int i = 0; //i是陣列元素的值

for (; p < uids + 5; p++){

*p = i;

i++;

getchar();

函式指標

int msg(char* msg,char* title){

messagebox(0,msg,title,0);

return 0;

void main(){

//msg();

printf("%#x\n",msg);

printf("%#x\n",&msg);

//函式返回值型別,函式指標的名稱,函式的引數列表

int(*fun_p)(char* msg, char* title) = msg;

fun_p("訊息內容","標題");

getchar();

函式指標定義方式

:函式返回值型別,*函式指標的名稱,函式的引數列表 = 函式位址

int(*fun_p)(char* msg, char* title) = msg;

函式名即是函式的入口位址

所以msg

等同於&msg

應用場景

:  函式的引數列表是

函式指標

(函式的入口位址

)int add(int a,int b){

return a + b;

int minus(int a,int b){

return a - b;

void msg(int(*func_p)(int a, int b), int m, int n){

int r = func_p(m, n);

printf("執行結果:%d\n",r);

void main(){

//加法

msg(add, 10, 20);

//減法

//msg(minus,50,10);

getchar();

JNI入門之C C 基礎五

聯合體 共用體 不同型別的變數共同占用一段記憶體 相互覆蓋 聯合變數任何時刻只有乙個成員存在,節省記憶體 聯合體變數的大小 最大的成員所佔的位元組數 union myvalue int x int y double z void main union myvalue d1 d1.x 90 d1.y ...

Zookeeper入門(二)之基礎

在深入了解zookeeper的運作之前,讓我們來看看zookeeper的基本概念。本文主要包含如下內容 1 architecture 架構 2 hierarchical namespace 層次命名空間 3 session 會話 4 watches 監視 一 zookeeper的架構 架構圖如下 作...

C C 基礎 一 C 入門

先用c 來寫乙個helloworld的程式 include 預編譯指令 using namespace std 編譯指令 int main 函式頭 現在以第乙個c 程式引出一些最最最基本的概念。c 有兩種注釋形式 include語句是預處理指令。在c 中,使用乙個預處理器,該程式在進行主編譯之前,對...