指针-字符指针
Part1:
數組函參 字符指針 基本用法 常量字符串
我們把要把數組傳入函數時,其實傳入的是一個地址,對地址內的內容進行修改,對其進行sizeof的話得到的不是數組所占空間,而是指針所占的空間。
#include<stdio.h>void mylen(int arr[]) {int sz = sizeof(arr) / sizeof(arr[0]);printf("%d", sz); } int main(void) {int arr[10] = { 0 };mylen(arr);return 0; }//其結果為1/2字符指針:我們一般是先定義一個字符a,再定義一個字符指針變量指向a。
char test='a'; char* p=&test;或者定義一個字符數組,再定義一個指針變量指向它。
char arr[]="abcdef"; char* p=arr;如果我們直接定義一個指針變量,再將一個字符或字符串賦給指針變量,其實賦的是第一個字符的地址。這樣的字符串被稱為常量字符串。
char* p="abcdef";為什么稱之為常量字符串呢?按照我們之前的理解,我們有一個指向首字符的指針是不是可以對其進行修改呢?
#include<stdio.h>int main(void) {char* p = "abcdef";*p = 'W';printf("%s", p); }這里運行是程序是會崩潰的。但是編譯器并不會報錯,為了解決這個問題,我們再定義時可以加上const
const char* p="abcdef";Part2:
常見錯誤 比較字符數組 常量空間
我們在做題目的時候時常遇見比較兩個數組的判斷條件,這個時候如果直接比較數組名,那其實是在比較地址。
char arr[] = "abcdef";char arr1[] = "abcdef";if(arr==arr1)//地址并不相同常量字符串,如果兩個常量字符串相同,那么系統是不會開辟兩塊空間去存放的,這個時候如果用兩個指針指向它,其存放的地址是相同的。
char* p = "abcdef";char* q = "abcdef";if(p==q)//由于常量相同,p與q的值相同總結
- 上一篇: 关于数据存储的经典题
- 下一篇: 数组名与数组指针的关系