#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //一級指針的典型用法 //數組 int a[10] //字符串 //1 C語言的字符串 以零結尾的字符串 //2 在C語言中沒有字符串類型 通過字符數組 來模擬字符串 //3 字符串的內存分配 堆上 棧上 全局區 (很重要) // []的本質 :和*p 是一樣 ,只不過是符合程序員的閱讀習慣 // buf5 是一個指針, 只讀的常量 buf5是一個常量指針 析構內存的時候,保證buf所指向的內存空間安全釋放 //為什麼這麼做? //p普通指針和內存首地址區別 //字符數組 初始化 void main51() { //1 指定長度 char buf2[100] = {'a', 'b', 'c', 'd'}; //1-1char buf3[2] = {'a', 'b', 'c', 'd'}; //如果初始化的個數大於內存的個數 編譯錯誤 //1-22//後面的buf2[4]-buf2[99] 0 //2 不指定長度 C編譯器會自動幫程序員 求元素的個數 char buf1[] = {'a', 'b', 'c', 'd'}; //buf1是一個數組 不是一個以0結尾的字符串 printf("buf2: %s \n", buf2); printf("buf2[88]:%d \n", buf2[88]); printf("hello....\n"); system("pause"); return ; } //用字符串 來 初始化字符數組 //strlen() 長度 不包括0 //sizeof() 內存塊的大小 void main52() { } //通過數組下標 和 指針 void main58() { int i = 0; char *p = NULL; char buf5[128] = "abcdefg"; // buf for (i=0; i<strlen(buf5); i++) { printf("%c ", buf5[i]); } p = buf5; //buf 代表數組首元素的地址 for (i=0; i<strlen(buf5); i++) { p = p +i; printf("%c ", *p ) ; } //buf for (i=0; i<strlen(buf5); i++) { printf("%c ", *(buf5+i) ) ; } //[] *的推導過程 // buf5[i] ===> buf5[0+i]; ==> *(buf5+i); { //buf5 = buf5 + 1; //buf5 = 0x11; } printf("hello....\n"); system("pause"); }