1. 程式人生 > >C語言中指標初始化和常規運算

C語言中指標初始化和常規運算

1. 指標初始化注意須知
<1>指標變數和普通變數一樣,外部或者靜態指標變數若未初始化,則被自動初始化為NULL,它的值為0(ASCII字元NULL的程式碼)。

<2>可以用已初始化的指標變數初始化另一個指標變數。例如:int a=3; int *p=&a; int *s =p;

<3>可以將一個指標變數初始化為空指標,但是,不能用常量作為指標變數的初始值。
錯誤的使用:int *p = 1000;
正確的使用:int *p = NULL; p=2000;

2. void *型別的指標(空指標型別)和空指標
 void *型別的指標表示指向的型別為空或不確定,使用時,經常和強制型別轉換一起使用。該型別的指標指向的型別是 void,不管其中的值為什麼,都能進行儲存。
 空指標是指:不管其指向的型別是什麼,其值都是為NULL(或者0)。

3. 指標的加減運算
<1>指標的加減整數運算
 設p指向某陣列的第一個元素,那麼p+n則表示指向下標為n的元素。注意是小標為n的元素,陣列的第一個元素下標為0。不要被迷糊了。不管指標變數指向何種資料型別,當指標加(減)一個整數n,其結果就是指標向地址後(前)移動n*sizeof(指標的資料型別)個位元組的距離。

<2>指標間相減運算
 當p和s為陣列指標地方時候,p-s的絕對值表示它們所指向的資料之間元素的個數,如果結果為1,則代表p和s所指向的兩個元素是相鄰的。

<3>指標的關係運算
 前提是兩個指標指向的是同一個物件,比如同一個數組。注意:只有相同型別的指標才能進行比較。

運算表示式 如果為真
p<s p所指向的元素在s所指向的元素之後
p>s p所指向的元素在s所指向的元素之前
p==s p和s指向的是同一個元素
p<=s p所指向的元素在s所指向的元素之後或等於s所指向的元素
p>s p所指向的元素在s所指向的元素之前或等於s所指向的元素

相關推薦

C語言指標初始常規運算

1. 指標初始化注意須知 <1>指標變數和普通變數一樣,外部或者靜態指標變數若未初始化,則被自動初始化為NULL,它的值為0(ASCII字元NULL的程式碼)。 <2>可以

C語言結構體初始結構體指標

結構體初始化 #include <stdio.h> //結構體的宣告和定義方法 //1.宣告和定義分離 struct weapon{ char name[20]; in

C語言初始問題

經常在C語言工程中,尤其是比較大的程式,執行過程中會出現由於記憶體或堆疊導致的各種問題,輸出錯誤或執行崩潰~~ 1.字串陣列的初始化 (1) char str[10]=""; (2) char str[10]={’\0’}; (3) char str[10]; str[0]=’\0’;

C語言宣告、定義初始的區別

函式和變數(全域性變數)都有宣告和定義, 對於函式而言: 同一檔案內,如果函式fun_1呼叫fun_2時,如果fun_2在fun_1之後定義,則需在fun_1之前對fun_2進行宣告,如下: void fun_2();// 宣告 void fun_1() { ... fu

c語言指標陣列陣列指標的認識

1.陣列:一批具有同名的同屬性的資料就組成了一個數組。(“[ ]”也是陣列型別的一部分)     由此可知:(1)陣列是一組有序資料的集合;(2)陣列中的每一個元素都屬於同一個資料型別。  定義一維陣列的一般形式:型別符  陣列名【常量表達式】(陣列也

關於C語言返回區域性變數區域性指標變數

char *test1(void) { char b[10] = "abcde"; return b; } char *test1_ver2(void) { static char b[10] = "abcde"; return b; } char *test2(voi

C語言指標變數作為函式引數一般變數作為函式引數的區別

函式的引數不僅可以是整型、浮點型、字元型等資料,還可以是指標型別。它的作用是將一個變數的地址傳送到另一個函式中。 指標變數作為函式引數和一般變數作為函式引數是有區別的,對於這種區別初學者一般都很迷惑。下面我將就一個簡單的例子來說明一下它們的區別。看透以後也許也就不那麼疑惑了。

C語言的未初始的數組的值為什麽是隨機的

urn turn 隨機 說明 tin main ont 情況 同學 突然想起來前幾天同學問我為什麽沒有初始化的數組的值是隨機的,發現這個困惑自己也是存在的,所以自己總結的心得. 1. 首先,並不是所有未初始化的數組的值都是隨機的.對於沒有初始化的數組,分兩種情況:  

c語言裡面變數初始問題與Java區別

C語言中,定義區域性變數時如果未初始化,則值是隨機的,為什麼? 定義區域性變數,其實就是在棧中通過移動棧指標來給程式提供一個記憶體空間和這個區域性變數名繫結。因為這段記憶體空間在棧上,而棧記憶體是反覆使用的(髒的,上次用完沒清零的),所以說使用棧來實現的區域性變數定義時如果不顯式初始化,值

C語言無符號數有符號數相加比較的問題

轉自https://blog.csdn.net/supreme42/article/details/6687781 看個題: #include<stdio.h> int main() { unsigned int a=6; int b=-20; printf("%d\n"

C語言的淺拷貝深拷貝

淺拷貝 首先看下面這段程式碼: # include<assert.h> # include<string.h> #include <stdlib.h> typedef struct Node//定義了一個結構體 { int size; char *da

C語言陣列的初始

一維陣列 其一般形式為:  型別名    陣列名    [陣列長度]     =     {初值表} 注:雖然C語言規定,只有靜態儲存的陣列才能初始化,但一般的C編譯系統都允許對動態儲存的陣列賦初值 對靜態陣列初始化: static in

C語言的隨機數 srand ( ) rand ( )

在C語言中,生成一個隨機數,一般利用兩個函式,即void srand ( unsigned int seed ) 和 int rand ( void )。     srand() 函式用於生成一個隨機數種子,種子的值等於引數seed,這個引數由我們指定一個

C語言指標的值賦值給陣列

  如果把各種語言做個冷兵器類比的話,C語言一定是刀客的最佳工具.入門很簡單,但是要是能把它熟練運用,那就是頂尖級別的高手了. 用了那麼多年的C語言,發現自己還是僅僅處於熟練的操作工.今天遇到了一個bug,就是和指標的賦值有關係.請看程式碼: 1 #include <stdio.h>

C語言的單引號雙引號的區別

  首先肯定地說,二者是有區別的,不是說用誰都一樣。 1、實質區別,代表的含義不同 'A'代表的是一個整數,而且這個整數對應的是編譯器所採用的字符集中的字元序列對應的數值。所以'A'跟ASCII中的65意義是相同的。 1 # include <iostream>

C語言指標指標陣列的理解!

指標就是地址! 概念 C語言中,允許用一個變數來存放地址,這種變數稱為指標變數。一個指標變數的值就是某個記憶體單元的地址。指標變數就是用來存放指標(地址)的變數! &運算子:求某一變數在儲存單元中的記憶體地址。 *運算子:取出指標變數所指向變數的內容,後面

C語言指標陣列的記憶體地址

char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2);

C語言指標變數所佔位元組大小

在學習過程中知道,一個任何型別的指標變數所佔的位元組大小都為4個位元組。這是為什麼呢? 記憶體是由位元組組成的,每個位元組都有一個編號。指標變數主要是存放相同資料型別的變數的首地址。這裡的這個地址其實就是記憶體的某個位元組的編號。而這個編號的確定是與地址匯流排有關。如果地址

C語言全域性未初始資料段分析

前言:         在分析C語言全域性未初始化變數時,發現在目標檔案中全域性未初始化變數並不是直接放在bss段中。         再後來發現在兩個.c檔案中定義同名的全域性變數,連結時居然沒有

C 語言的結構體共用體(聯合體)

本文主要總結了譚浩強主編的《C 程式設計》教材中結構體和共用體相關章節的內容。 在 C 語言中, 結構體(struct) 是一個或多個變數的集合,這些變數可能為不同的型別,為了處理的方便而將這些變數組織在一個名字之下。由於結構體將一組相關變數看作一個單元而不是各自獨立的實體,因此結構體有助於組織複雜的資料,